从 Task<(string,object)> 转换为 Task<string>
Converting from Task<(string,object)> to Task<string>
是否可以从 Task<(string,object)>
转换为 Task<string>
?我有一个接收 Task<string>
作为参数的方法,但是从另一个返回类型的方法我得到 Task<(string,object)>
.
是的,只需使用 lambda:
var task_with_obj = func();
Func<Task<string>> func_string = async () => (await task_with_obj).Item1;
var task = func_string();
ContinueWith
使用给定的 Func<Task<T>, U>
:
将 Task<T>
转换为 Task<U>
Task<(string, object)> tupleTask = MethodThatReturnsTupleTask();
Task<string> stringTask = tupleTask.ContinueWith(tuple => tuple.Result.Item1);
MethodThatAcceptsStringTask(stringTask);
你可以使用 LINQ to Tasks:
Task<(string, object)> task1 = GetStuffAsync();
Task<string> task2 = task1.Select(value => value.Item1);
这里是 Select
运算符:
public static async Task<T2> Select<T1, T2>(this Task<T1> source, Func<T1, T2> selector)
{
return selector(await source);
}
可在此处找到完整的 Linq-to-Tasks“套件”:LinqToTasks.cs. It is part of the ParallelExtensionsExtras package. Its implementation predates async/await, so it is based on the primitive ContinueWith
方法,包含所有相关内容(异常行为不佳等)。
是否可以从 Task<(string,object)>
转换为 Task<string>
?我有一个接收 Task<string>
作为参数的方法,但是从另一个返回类型的方法我得到 Task<(string,object)>
.
是的,只需使用 lambda:
var task_with_obj = func();
Func<Task<string>> func_string = async () => (await task_with_obj).Item1;
var task = func_string();
ContinueWith
使用给定的 Func<Task<T>, U>
:
Task<T>
转换为 Task<U>
Task<(string, object)> tupleTask = MethodThatReturnsTupleTask();
Task<string> stringTask = tupleTask.ContinueWith(tuple => tuple.Result.Item1);
MethodThatAcceptsStringTask(stringTask);
你可以使用 LINQ to Tasks:
Task<(string, object)> task1 = GetStuffAsync();
Task<string> task2 = task1.Select(value => value.Item1);
这里是 Select
运算符:
public static async Task<T2> Select<T1, T2>(this Task<T1> source, Func<T1, T2> selector)
{
return selector(await source);
}
可在此处找到完整的 Linq-to-Tasks“套件”:LinqToTasks.cs. It is part of the ParallelExtensionsExtras package. Its implementation predates async/await, so it is based on the primitive ContinueWith
方法,包含所有相关内容(异常行为不佳等)。