【发布时间】:2013-04-29 10:00:32
【问题描述】:
是否可以使用 TPL Task<TResult> 异步调用具有以下签名的线程安全方法并检索布尔返回值和输出参数?
public bool TryGet(T1 criteria,
out T2 output)
显然,由于输出参数,我不能使用 lambda 表达式。此外,我无法通过定义如下所示的自定义委托并将其传递给 Task<TResult> 构造函数来解决问题,因为我需要将标准作为构造函数不支持的强类型参数传递。
public delegate TResult Func<T1, T2, TResult>(T1 arg1,
out T2 arg2);
是编写如下所示的包装器并异步调用它的最佳选择吗?
public Tuple<bool, T2> TryGetWrapper(T1 criteria)
{
T2 output;
bool result = obj.TryGet(criteria,
out output);
return new Tuple<bool, T2>(result,
output);
}
只是看起来有点不雅,而且有一点点味道。
【问题讨论】:
标签: c# task-parallel-library output-parameter