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

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

Barbara Streisand
发布: 2025-01-04 12:01:35
原创
367 人浏览过

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

揭秘异步和等待:避免 Task.Run 难题

一开始理解异步和等待可能会很棘手,但要分解概念可以简化流程。

异步与后台线程执行

异步本质上并不意味着“后台线程”;它指的是允许在继续之前将控制权“让渡”给调用线程的方法。这些让出点用await表达式标记。

Awaitable 与异步

Awaitable 类型可以等待(如在await 表达式中),而异步方法允许异步执行。并非所有异步方法都会返回可等待类型,反之亦然。

Task.Run 进行后台执行

如果您想在后台线程上执行操作并使其可等待,使用 Task.Run:

private Task<int> DoWorkAsync() 
{
    return Task.Run(() => 1 + 2); 
}
登录后复制

异步方法屈服

通过在方法签名中使用await和async来创建返回给调用者的异步方法:

private async Task<int> GetWebPageHtmlSizeAsync()
{
    var client = new HttpClient();
    var html = await client.GetAsync("http://www.example.com/");
    return html.Length;
}
登录后复制

避免在同步方法中使用Task.Run

不建议在Task.Run中包装同步方法。如果需要在后台线程上执行,请创建一个单独的任务。

进一步探索的资源

  • [M. Thaddeus Payne 的 Async/Await 简介博客](https://blog.m-thaddeus.com/async- and-await-simplified-an-简介/)
  • [异步编程的 MSDN 文档](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/)

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

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