首页 >后端开发 >C++ >Await Task.Run(() => ...) 与 Await LongProcess():什么时候应该使用它们?

Await Task.Run(() => ...) 与 Await LongProcess():什么时候应该使用它们?

Barbara Streisand
Barbara Streisand原创
2025-01-22 18:26:09846浏览

Await Task.Run(() => ...) 与 Await LongProcess():什么时候应该使用它们?
” /></p>
<h2>Async/Await 和 Task.Run:详细比较</h2>
<p>异步编程经常涉及<code>await</code>和<code>Task.Run</code>,导致潜在的混乱。  本文通过一个具体的例子来阐明它们的区别。</p>
<h3>示例</h3>
<p>让我们分析一下这些代码片段:</p>
<pre class=<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

Task.Run 在启动异步操作而不立即等待其完成时很有价值。在异步操作运行时保持对用户输入或其他任务的线程响应能力时,这是有利的。

情景分析

在此示例中,两种方法都会产生相同的结果。 await Task.Run(...) 在由 Task.Run 管理的单独线程上执行异步操作。然而,当前线程仍然等待完成,这使得它在功能上等同于直接等待 LongProcess.

总结

掌握 async/await 的细微差别对于高效的异步编程至关重要。 在这种特定情况下,await Task.Run(...)await 都达到相同的结果。 最佳选择取决于是否有必要在异步操作期间保持当前线程的响应能力。

以上是Await Task.Run(() => ...) 与 Await LongProcess():什么时候应该使用它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn