首页 > 后端开发 > C++ > 我什么时候应该将'Task.Run”与 Async/Await 一起使用?

我什么时候应该将'Task.Run”与 Async/Await 一起使用?

DDD
发布: 2025-01-03 13:42:40
原创
731 人浏览过

When Should I Use `Task.Run` with Async/Await?

理解 Async/Await:何时使用 Task.Run

在异步编程领域,区分异步方法( async)和异步执行(后台线程)。为了深入研究细微差别,让我们探讨以下场景:

场景 1:无后台线程

private async Task DoWork1Async()
{
    int result = 1 + 2;
}
登录后复制

在此示例中,该方法被标记为异步,但执行不需要后台执行的简单操作。因此,等待 DoWork1Async() 将同步执行。

场景 2:在后台线程上执行

private async Task DoWork2Async()
{
    Task.Run( () =>
    {
        int result = 1 + 2;
    });
}
登录后复制

这里,该方法再次标记为异步,但是它将实际操作包装在 Task.Run 中。这确保操作在后台线程上执行。然而,等待 DoWork2Async() 仍将同步执行,因为后台线程操作未被等待。

方法返回类型和异步行为

a 的返回类型方法还可以影响其异步行为。 返回任务或任务的方法可以等待。这意味着在异步方法中,我们可以使用await来暂停其执行,并在等待的任务完成后恢复。

Task.Run 异步执行

要使方法可等待并在后台线程上执行其操作,我们应该使用 Task.Run 创建一个新的task. 这种方法比将整个方法包装在 Task.Run 中更合适,因为它允许我们在同步和异步代码之间保持清晰的分离。

private Task<int> DoWorkAsync() // No async because the method does not need await
{
  return Task.Run(() =>
  {
    return 1 + 2;
  });
}
登录后复制

最佳实践

  • 使用 Task.Run 进行后台线程执行。
  • 避免包装同步方法在任务中运行;让消费者决定如何执行它们。
  • 采用声明式 async/await 语法来编写异步代码。
  • 有关异步的更多详细信息,请参阅 MSDN 文档。

以上是我什么时候应该将'Task.Run”与 Async/Await 一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板