public Task<Tresult> WrapIntoTask<Tresult>(Func<Tresult> function)
where Tresult : class
{
return Task.Run(function);
}
public Task<Tresult> WrapIntoTask<T, Tresult>(Func<T, Tresult> function)
where Tresult : class where T : class
{
return Task.Run(function); // Cannot pass in Func<T1, Tresult>
}
第一种方法符合要求并且工作正常,而第二种方法不允许编译。
如何将实际T
值传入Task
?
答案 0 :(得分:2)
由于您需要将不带任何其他参数的委托传递给Task.Run
,因此您需要通过传递类型为T
的参数将参数获取委托包装到无参数委托中。< / p>
return Task.Run(() => function(default(T)));
// ^^^^^^^^^^
// Replace this
当然,您需要将T
类型的实例传递给function
来代替default(T)
。例如,您可以将T
与function
一起传递,如下所示:
public Task<Tresult> WrapIntoTask<T, Tresult>(Func<T, Tresult> function, T arg)
where Tresult : class where T : class
{
return Task.Run(() => function(arg));
}