<code class=" language-csharp>await Task.Run(() => LongProcess()); </p> <pre class="brush:php;toolbar:false"><code class="language-csharp">await LongProcess();</code>
LongProcess
是使用 await ExecuteReaderAsync()
.
需要澄清的是,async
/await
本身并不创建多个线程。 一个线程处理所有事情。
Async
/await
允许线程在等待异步操作时执行其他任务。 想象一下,一位厨师在切蔬菜和检查烤箱之间同时处理多项任务;线程类似地在任务之间切换,直到遇到 await
,然后恢复执行。
Task.Run
在启动异步操作而不立即等待其完成时很有价值。在异步操作运行时保持对用户输入或其他任务的线程响应能力时,这是有利的。
在此示例中,两种方法都会产生相同的结果。 await Task.Run(...)
在由 Task.Run
管理的单独线程上执行异步操作。然而,当前线程仍然等待完成,这使得它在功能上等同于直接等待 LongProcess
.
掌握 async
/await
的细微差别对于高效的异步编程至关重要。 在这种特定情况下,await Task.Run(...)
和 await
都达到相同的结果。 最佳选择取决于是否有必要在异步操作期间保持当前线程的响应能力。
以上是Await Task.Run(() => ...) 与 Await LongProcess():什么时候应该使用它们?的详细内容。更多信息请关注PHP中文网其他相关文章!