如何在 TaskAwaiters 数组上执行 WhenAll?

How do I perform WhenAll on an array of TaskAwaiters?

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

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

如何对 TaskAwaiter 个实例的数组执行 WhenAll

The CTP of the TPL had a TaskEx.WhenAll() extension, which you could use to await TaskAwaiter instances.

你确定吗?我不记得了。再说了,很久以前的事了,可能记不太清了。

I am using an interface that returns an awaitable result that isn't a Task. An awaitable result [that] has a GetTaskAwaiter() method.

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

async Task DoSomethingAsync(string parameter) => await NonTaskAsync(parameter);

并这样使用 Select

string[] parameters = ...;
var tasks = parameters.Select(DoSomethingAsync);
await Task.WhenAll(tasks);