我是否已使用
创建Task
Task.Factory.StartNew<GroupPreferenceList>(())
并且调用一个函数,就像我有7个方法一样,所有方法都包含一个或两个API调用。现在我正在使用:
Task.GetAwaiter().GetResult()
非常重要的任务是获取非常任务的结果并对其进行一些操作。
我的问题是我是否应该创建另一个并使用WhenAll()
或我正在做的事情是正确和快速的。
谢谢
答案 0 :(得分:0)
在这方面有几点要点:
Task.Factory.StartNew<GroupPreferenceList>(())
使用Task.Run<GroupPreferenceList>(())
,这里有斯蒂芬克莱里的好消息StartNew is Dangerous Task.GetAwaiter().GetResult()
,我可以理解在等待的任务中使用GetAwaiter()
,但这里没有用例。此外,每个调用都将在主线程上,从而消除并发的好处并等待获取每个执行的任务结果WhenAll()
在这种情况下,我的建议是:
Task.Run
为每个任务创建一个任务集合Task.WaitAll
等待每个完成,然后访问Task对象的每个Result
调用的Result,前提是您使用Generic版本作为Task
的基类没有它。上面的答案是基于这样一个前提:您需要TPL进行处理,以防其基于IO的并发,然后将完整的调用转换为Async-Await,因为它最适合基于IO的并发