我在网上搜索过很多关于 Task.Run
和 await async 的问题,但是有一个具体的使用场景我不太明白其中的区别。我相信场景非常简单。
await Task.Run(() => LongProcess());
对比
await LongProcess());
LongProcess
是一个异步方法,其中包含一些异步调用,例如使用 await ExecuteReaderAsync()
调用 db。
问题:
在这个场景下两者有什么区别吗?感谢任何帮助或输入,谢谢!
最佳答案
Task.Run
可以将要处理的操作发布到不同的线程。这是唯一的区别。
这可能有用 - 例如,如果 LongProcess
不是真正的异步,它会使调用者返回得更快。但是对于一个真正的异步方法,使用 Task.Run
是没有意义的。 ,并可能造成不必要的浪费。
不过要小心,因为 Task.Run
的行为将根据重载决议而改变。在您的示例中,Func<Task>
将选择过载,这将(正确地)等待 LongProcess
完成。但是,如果使用非任务返回委托(delegate),Task.Run
只会等待执行到第一个 await
(请注意,这就是 TaskFactory.StartNew
将始终 的行为方式,所以不要使用它)。
关于c# - 等待 Task.Run 与等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38739403/