首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Task.WhenAll与任务启动行为

Task.WhenAll与任务启动行为
EN

Stack Overflow用户
提问于 2015-10-29 09:03:45
回答 3查看 5.6K关注 0票数 13

我有一个使用Task.WhenAll的相当简单的应用程序。到目前为止,我面临的问题是,我不知道是该自己启动子任务,还是让WhenAll酌情启动它们。

这些示例在线显示使用来自框架方法的任务,在这里,我不清楚返回的任务是否已经启动。然而,我已经用一个Action创建了我自己的任务,所以这是我必须解决的细节。

当我使用Task.WhenAll时,我是应该直接开始组成任务,还是应该让Task.WhenAll处理它以获得乐趣、利润和提高执行速度?

为了进一步的乐趣,子任务包含了大量的阻塞I/O。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-29 09:25:25

WhenAll不会为您启动任务。你得自己动手。

代码语言:javascript
运行
复制
var unstartedTask = new Task(() => {});
await Task.WhenAll(unstartedTask); // this task won't complete until unstartedTask.Start()

但是,一般情况下,创建的任务(例如使用Task.Runasync方法等)已经开始了。因此,您通常不需要采取单独的行动来启动这项任务。

代码语言:javascript
运行
复制
var task = Task.Run(() => {});
await Task.WhenAll(task); // no need for task.Start()
票数 24
EN

Stack Overflow用户

发布于 2015-10-29 11:58:34

我用一个动作创建了我自己的任务

当您处理异步任务时,约定只处理已经在进行中的任务。。因此,使用Task构造函数和Start是不适当的;最好使用Task.Run

正如其他人所指出的,Task.WhenAll只聚合任务;它不为您启动它们。

票数 5
EN

Stack Overflow用户

发布于 2015-10-29 09:15:12

Task.WhenAll(IEnumerable)将为您处理所提供的任务,但是您可以使用最常见的方法创建它们--通过执行Task.Run(Action)或TaskFactory.StartNew(Action)方法。

请注意:如果在故障状态下完成了任何任务,则结果任务也将在故障状态下完成,并将AggregateException设置为其异常属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33409846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档