揭秘异步和等待:避免 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中包装同步方法。如果需要在后台线程上执行,请创建一个单独的任务。
进一步探索的资源
以上是我什么时候应该将'Task.Run”与 Async 和 Await 一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!