在理解 async/await 的过程中,出现了一个困境:是否有必要在其中封装一个方法Task.Run 同时实现异步行为和后台线程执行?
“异步”表示可以在开始执行之前将控制权交给调用线程的方法。这种让步是通过await 表达式发生的。相反,MSDN(一个经常误导性的术语)定义的“异步”是指在单独线程上运行的代码。
另外,“awaitable”描述了可以与await 运算符一起使用的类型。常见的可等待对象包括 Task 和 Task
要在保持可等待性的同时在后台线程上执行方法,请使用 Task.Run:
private Task<int> DoWorkAsync() { return Task.Run(() => 1 + 2); }
但是,通常不鼓励这种方法。
要创建可以暂停和屈服控制的异步方法,请将该方法声明为异步,并在指定的屈服点使用await:
private async Task<int> GetWebPageHtmlSizeAsync() { var html = await client.GetAsync("http://www.example.com/"); return html.Length; }
异步代码依赖于其await表达式中的awaitables。 Awaitable 可以是其他异步方法,也可以是返回可等待的同步方法。
避免在 Task.Run 中不加区别地包装同步方法。相反,维护同步签名,将包装选项留给消费者。
以上是异步/等待:我应该将我的方法包装在'Task.Run”中以进行后台线程吗?的详细内容。更多信息请关注PHP中文网其他相关文章!