Task.WhenAll但处理结果一一列出

虚度

假设我有一个任务列表,我想并行运行它们。但是我并不需要所有人都完成才能继续,我只能继续讲下去。以下代码等待所有任务继续进行。我有办法单独等待其他任务完成吗?

List<string>[] x = await Task.WhenAll(new Task<List<string>>[] { task1, task2 })
// when task1 finishes, I want to process the result immediately instead of waiting on task2.

提前致谢!

菲尔多

您可以改用Task.WhenAny

Stephen Cleary的博客中的示例“被盗”

var client = new HttpClient();
string results = await await Task.WhenAny(
    client.GetStringAsync("http://example.com"),
    client.GetStringAsync("http://microsoft.com"));
// results contains the HTML for whichever website responded first.

回应评论

您绝对可以跟踪其他任务:

// supposing you have a list of Tasks in `myTasks`:
while( myTasks.Count > 0 )
{
    var finishedTask = await Task.WhenAny(myTasks);
    myTasks.Remove(finishedTask);
    handleFinishedTask(finishedTask); // assuming this is a method that
                                      // does the work on finished tasks.
}

您唯一需要注意的是:

返回的任务将始终以RanToCompletion状态结束,其结果设置为要完成的第一个任务。即使完成的第一个任务以“已取消”或“故障”状态结束,也是如此。

WhenAny Doks中的评论(我强调)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

链接Task.WhenAll()

来自分类Dev

链接Task.WhenAll()

来自分类Dev

列出sbt`Task`标签

来自分类Dev

VB.Net Task结果自动转换为Task(of Task)

来自分类Dev

如何从Task返回结果?

来自分类Dev

如何模拟Task <>结果?

来自分类Dev

Task.WhenAll的顺序版本

来自分类Dev

ActionBlock <T>与Task.WhenAll

来自分类Dev

PCL中的Task.WhenAll

来自分类Dev

Task.WhenAll-何时使用

来自分类Dev

如何取消Task.WhenAll?

来自分类Dev

是Task.WhenAll顺序的结果得到保证吗?

来自分类Dev

使用Task.WhenAll时如何获得结果

来自分类Dev

JavaFX ExecutorService丢失了Task的结果

来自分类Dev

Task.Run-处理异常

来自分类Dev

从Task.WhenAll获取返回值

来自分类Dev

Task.WhenAll和任务启动行为

来自分类Dev

Task.WhenAll()-是否创建新线程?

来自分类Dev

在Task.WhenAll中捕获异常

来自分类Dev

为Task.WhenAll()创建数组

来自分类Dev

Task.WhenAll返回列表而不是数组

来自分类Dev

为复杂的 Task.WhenAll 添加超时

来自分类Dev

MySQL - 错误代码:1054。“on 子句”中的未知列“task_log_wip.task_log_task”

来自分类Dev

如何使用Task.WhenAll为列表中的每个项目运行方法并存储结果?

来自分类Dev

等待Task.WhenAll(tasks)异常处理,记录任务中的所有异常

来自分类Dev

在哪里处理Task引发的异常

来自分类Dev

使用Task.WaitAll()处理等待的任务?

来自分类Dev

如何处理Task中的不同异常?

来自分类Dev

在哪里处理Task引发的异常