Nei*_*len 4 c# asynchronous task c#-8.0
随着“无处不在的异步”,触发多个异构操作的能力变得越来越频繁。当前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");
Run Code Online (Sandbox Code Playgroud)
我能想到的最好的实现是
public static class AsyncExtensions
{
public static async Task<(TA , TB )> WhenAll<TA, TB>(Task<TA> operation1, Task<TB> operation2)
{
return (await operation1, await operation2;
}
}
Run Code Online (Sandbox Code Playgroud)
这样做的缺点是我需要实现最多 N 个参数的单独方法。根据这个答案,这只是使用泛型的限制。此实现还存在无法支持返回 void 的任务的限制,但这不是一个问题。
我的问题是:即将推出的语言功能是否允许采用更简洁的方法来解决此问题?
dotnet/csharplang 存储库上有一个开放的功能请求。
该问题还提到了另一个开放功能请求,即元组喷溅,这在某种程度上可能有所帮助。如何,这里解释一下。
这两个问题目前都被标记为[讨论]和[功能请求],并且已经“闲置”一年了(2017年5月 - 2018年5月)。
因此我推断答案(目前)是“否”。
以扩展方式 Joseph Musser 确实写了很多这些内容供我们复制和粘贴:https://gist.github.com/jnm2/3660db29457d391a34151f764bfe6ef7