我想对数据库执行多个非链接结果,所以我正在使用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自变量?
答案 0 :(得分:3)
不幸的是,无法拥有可变数量的泛型类型参数。像Action和Tuple这样的实例具有多达8个左右泛型的单独定义。
支持任意长度的泛型将是对该语言的重大改变。
IE。
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