我正在尝试从一个包装器中调用我的异步函数。但我得到了这个编译器错误。在下面的代码中,我想要将大部分等待操作抽象/推到
CallAsyncFunc
代码中,并获取string x
值。在c# 4.5中,正确的方法是什么?谢谢!
错误 CS4010:无法将异步 lambda 表达式转换为委托类型 '
System.Func<int,string>
'。异步 lambda 表达式可以返回void
、Task
或Task<T>
,其中没有一个可转换为 'System.Func<int,string>
'。
public async Task<T2> CallAsyncFunc<T1,T2>(T1 a, Func<T1, T2> func)
{
return func.Invoke(a);
}
public async Task<string> GetString(int value)
{
await Task.Run(() => Thread.Sleep(2000));
return "" + value;
}
public async Task MainAsyncEntry()
{
string x = await CallAsyncFunc<int, string>(30, async(x) => await GetString(x));
}
"" + value
应该改为value.ToString()
。 - Paulo Morgado