Pup*_*ppy 7 c# task task-parallel-library
我使用Task.WhenAll有一个相当简单的应用程序.到目前为止我面临的问题是我不知道我是否应该自己启动子任务,或者让WhenAll在适当时启动它们.
在线示例显示了使用框架方法中的任务,我不清楚返回的任务是否已经开始.但是我用Action创建了自己的任务,所以这是我必须解决的细节.
当我使用Task.WhenAll时,我应该直接启动组成任务,还是应该让Task.WhenAll处理它以获得乐趣,获利和提高执行速度?
为了进一步有趣,子任务包含大量阻塞I/O.
Ere*_*mez 13
WhenAll不会为你启动任务.你必须自己启动它们.
var unstartedTask = new Task(() => {});
await Task.WhenAll(unstartedTask); // this task won't complete until unstartedTask.Start()
Run Code Online (Sandbox Code Playgroud)
但是,通常,已经开始创建任务(例如使用Task.Run,async方法等).因此,您通常不必采取单独的操作来启动任务.
var task = Task.Run(() => {});
await Task.WhenAll(task); // no need for task.Start()
Run Code Online (Sandbox Code Playgroud)
我用 Action 创建了自己的任务
当您处理异步任务时,约定是只处理已经在进行中的任务。所以使用Task构造函数和Start是不合适的;最好使用Task.Run.
正如其他人所指出的,Task.WhenAll只聚合任务;它不会为您启动它们。
| 归档时间: |
|
| 查看次数: |
2876 次 |
| 最近记录: |