如何在 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);
我正在使用 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);