理解 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 的返回类型方法还可以影响其异步行为。 返回任务或任务
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 一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!