随着“无处不在”,启动多个异构操作的能力变得越来越频繁。当前的Task.WhenAll
方法将其结果作为数组返回,并要求所有任务返回相同类型的对象,这使得它的使用有点笨拙。我喜欢能够写...
var (i, s, ...) = await AsyncExtensions.WhenAll(
GetAnIntFromARemoteServiceAsync(),
GetAStringFromARemoteServiceAsync(),
... arbitrary list of tasks
);
Console.WriteLine($"Generated int {i} and string {s} ... and other things");
我能够提出的最佳实施是
public static class AsyncExtensions
{
public static async Task<(TA , TB )> WhenAll<TA, TB>(Task<TA> operation1, Task<TB> operation2)
{
return (await operation1, await operation2;
}
}
这样做的缺点是我需要实现多达N个参数的单独方法。根据{{3}},这只是使用泛型的限制。此实现还有一个限制,即无法支持返回void的任务,但这不是一个问题。
我的问题是:是否有任何即将推出的语言功能可以更清晰地解决这个问题?
答案 0 :(得分:3)
open feature-request上有一个dotnet/csharplang repository。
该问题还提到了另一个开放功能请求,tuple splatting在某种程度上可能有所帮助。如何解释here。
这两个问题目前都标记为[讨论]和[功能请求],并且已经空闲&#34;现在一年(2017年5月 - 2018年5月)。
因此,我推断答案(目前)是&#34; no&#34;。