gpt4 book ai didi

c# - 可以使用新的 C# 语言功能来清理 Task.WhenAll 语法吗?

转载 作者:行者123 更新时间:2023-11-30 15:54:33 25 4
gpt4 key购买 nike

随着“无处不在的异步”,触发多个异构操作的能力变得越来越频繁。当前的 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 个参数的单独方法。根据this answer这只是使用泛型的限制。此实现还有一个限制,即不支持返回 void 的任务,但这不是一个问题。

我的问题是:是否有任何即将推出的语言功能允许采用更简洁的方法来解决这个问题?

最佳答案

有一个 open feature-request为此在 dotnet/csharplang repository .

该问题还提到了另一个开放的功能请求,tuple splatting这在某种程度上可能有所帮助。如何,解释here .

这两个问题目前都被标记为 [讨论] 和 [功能请求],并且已经“闲置”了一年(2017 年 5 月 - 2018 年 5 月)。

因此我推断答案(目前)是“否”。


采用扩展方式 Joseph Musser 确实写了很多这些供我们复制和粘贴:https://gist.github.com/jnm2/3660db29457d391a34151f764bfe6ef7

关于c# - 可以使用新的 C# 语言功能来清理 Task.WhenAll 语法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50217241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com