【发布时间】:2017-12-08 07:09:36
【问题描述】:
这是我们的async 方法,它在任务中执行了很长时间。
public async Task<int> LongRunningMethod(T p1, T p2, T p3);
我团队中的一些开发人员使用
Task t = Task.Factory.StartNew(LongRunningMethod(p1,p2,p3));
t.Wait(); //This will suspend main thread and wait for 't' to finish.
虽然有些用
await LongRunningMethod(p1,p2,p3);
// Here too, we simply 'await' till the method finishes.
注意:我们有一个异步任务,我们希望等到该任务完成。
简而言之,以上两种构造中哪一种是最好的?
【问题讨论】:
-
请定义“最佳”
-
为什么不异步等待(即await)任务完成?在这种情况下,也使用 Task.Factory.StartNew 不太可能是正确的,因为您遇到了嵌套任务问题(例如
Task<Task>或Task<Task<int>>此处)。首选 Task.Run,除非您有不使用它的令人信服的理由(例如已经与 StartNew 一起使用的现有遗留代码)。
标签: c# .net multithreading asynchronous .net-4.5