我已经在网上搜索了许多关于Task.Run
vs异步的问题,但是在这种特定的使用情况下,我不太了解其中的区别。我相信情况很简单。
await Task.Run(() => LongProcess());
与
await LongProcess());
其中LongProcess
有一个异步方法,其中有一些异步调用,例如使用await调用db的异步方法ExecuteReaderAsync()
。
问题:
在这种情况下,两者之间有什么区别吗?任何帮助或输入表示赞赏,谢谢!
Task.Run
可能会在另一个线程上发布要处理的操作。那是唯一的区别。
这可能有用-例如,如果LongProcess
不是真正的异步,它将使调用者更快地返回。但是对于真正的异步方法而言,使用毫无意义Task.Run
,这可能会导致不必要的浪费。
但是要小心,因为的行为Task.Run
会根据重载分辨率而变化。在您的示例中,Func<Task>
将选择过载,过载将(正确)等待LongProcess
完成。但是,如果使用了非任务返回的代表,Task.Run
仅会等待执行到第一await
(注意,这是怎么TaskFactory.StartNew
会一直循规蹈矩,所以不使用)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句