如何对 TaskAwaiters 数组执行 WhenAll?

Rob*_*don 1 c# task-parallel-library

我正在使用一个 API,该 API 返回不是任务的可等待对象(事实上,它们是PendingResult来自 Google 的 Android API 的实例)。我想等待所有这些都完成。但在当前模型下我只能等待一系列任务。

TPL 的 CTP 有一个TaskEx.WhenAll()扩展,您可以使用它来等待TaskAwaiter实例。但Task.WhenAll()仅适用于Task实例。

如何WhenAll对实例数组执行操作TaskAwaiter

Ste*_*ary 6

TPL 的 CTP 有一个 TaskEx.WhenAll() 扩展,您可以使用它来等待 TaskAwaiter 实例。

你确定吗?我不记得了。再说一遍,那是很久以前的事了,所以我可能不记得了。

我正在使用一个返回可等待结果的接口,该结果不是任务。可等待的结果具有 GetTaskAwaiter() 方法。

如果它返回自定义可等待,那么您只需使用async/await将其转换为Task

async Task DoSomethingAsync(string parameter) => await NonTaskAsync(parameter);
Run Code Online (Sandbox Code Playgroud)

Select并这样使用:

string[] parameters = ...;
var tasks = parameters.Select(DoSomethingAsync);
await Task.WhenAll(tasks);
Run Code Online (Sandbox Code Playgroud)