【发布时间】:2015-04-11 03:56:45
【问题描述】:
我正在尝试从包装器中调用我的异步函数。但是我收到了这个编译器错误。在下面的代码中,我想获得string x 值,其中大部分等待被抽象/推入CallAsyncFunc 代码。在 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));
}
【问题讨论】:
-
C# 不是 JavaScript。
"" + value应该是value.ToString()
标签: c# async-await