【问题标题】:Task.WhenAll in PCLPCL中的Task.WhenAll
【发布时间】:2014-03-12 10:06:12
【问题描述】:

我试图在我的可移植类库中运行一些async tasks concurrently,但似乎不支持WhenAll 方法。

我目前的解决方法是启动每个任务,然后等待每个任务:

var task1 = myService.GetData(source1);
var task2 = myService.GetData(source2);
var task3 = myService.GetData(source3);

// Now everything's started, we can await them
var result1 = await task1;
var result1 = await task2;
var result1 = await task3;

我有什么遗漏吗?我需要使用解决方法吗?

【问题讨论】:

  • 也许你可以用某种方式重写它,这样你就可以使用Parallel.ForEach() 方法之一?应该支持这些。
  • 便携类库不支持WhenAll,支持WaitAll。您可以通过等待所有然后开始来解决它吗?
  • 我可以解决它。这没什么大不了的。

标签: c# windows-8.1 portable-class-library


【解决方案1】:

我有什么遗漏吗?

是的:Microsoft.Bcl.Async

安装该软件包后,您可以使用TaskEx.WhenAll 代替Task.WhenAll

var task1 = myService.GetData(source1);
var task2 = myService.GetData(source2);
var task3 = myService.GetData(source3);

// Now everything's started, we can await them
var results = await TaskEx.WhenAll(task1, task2, task3);

附:考虑使用术语 parallel 来表示(CPU-bound)并行处理,而使用术语 concurrent 来表示一次做不止一件事。在这种情况下,(I/O-bound)任务是并发的,但不是并行的。

【讨论】:

  • 酷。我安装了 Microsoft.Bcl.Async,所以 TaskEx 只是坐在那里等我使用它!
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 2017-02-28
  • 2018-05-11
  • 1970-01-01
  • 2022-11-15
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多