我希望能够收集/运行任务,然后对它们执行Task.WhenAll
。
var tasks = new List<Task>();
foreach (var thing in things) {
tasks.Add(Task.Run(async () => {
// async stuff using thing
}));
}
var stuffs = await Task.WhenAll(tasks);
在这里使用Task.Run
是否正确,还是应该做些什么呢?
tasks.Add(new Func<Task>(async () => {async stuff})());
或者完全是其他什么东西?
things
是什么类型? - Ryan Searle//do stuff
包含了await
关键字。StartNew不能处理声明为async
的匿名函数。 - Scott ChamberlainTaskScheduler
参数呢?当你没有指定时,它会使用TaskScheduler.FromCurrentSynchronizationContext
,这可能会使你从StartNew
创建的任务在 UI 线程上运行,而不是在后台线程上运行,如果你正在从已经在后台的任务中执行此操作。我链接的文章描述了这个问题。 - Scott Chamberlaintasks.Add(Task.Run(() => {//Do stuff}); await Task.WhenAll(tasks);
,我就不会有任何意见了。 - Scott Chamberlain