gpt4 book ai didi

c# - 从 Task.WhenAll 获取结果的通用方法

转载 作者:太空宇宙 更新时间:2023-11-03 22:40:21 24 4
gpt4 key购买 nike

我想对数据库执行多个非链接结果,因此我使用 Task.WhenAll 来获取数据。我有辅助方法:

public static async Task<(T1, T2)> WhenAll<T1, T2>(Task<T1> task1, Task<T2> task2)
{
await Task.WhenAll(task1, task2);
var result1 = await task1;
var result2 = await task2;
return (result1, result2);
}

用法:

var (profile, roles) = await AsyncUtils.WhenAll(
_repository.GetUserProfile(userId),
_repository.GetUserRoles(userId)
);

是否可以重写此通用方法以接收 3、4、5 个参数?

最佳答案

不幸的是,没有办法拥有可变数量的泛型类型参数。像Action这样的实例和 Tuple对多达 8 个左右的泛型有单独的定义。

支持任意长度的泛型将是语言的重大变化。

即.

public static async Task<(T1, T2)> WhenAll<T1, T2>(Task<T1> task1, Task<T2> task2)
{
await Task.WhenAll(task1, task2);
return (task1.Result, task2.Result);
}

public static async Task<(T1, T2, T3)> WhenAll<T1, T2, T3>(Task<T1> task1, Task<T2> task2, Task<T3> task3)
{
await Task.WhenAll(task1, task2, task3);
return (task1.Result, task2.Result, task3.Result);
}

... etc for how ever many generics you want to support

关于c# - 从 Task.WhenAll 获取结果的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52525603/

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