我是async / await的初学者,但是我的代码出现错误,无法解决该问题:
public static Func<string> GetTheID;
void Main()
{
GetTheID = async () => await GetMyId(); //Error here!
Console.WriteLine(GetTheID);
}
public async Task<string> GetMyId()
{
return await Task.Run(() =>
{
return "AAABBBB";
});
}
我收到此错误:
无法将异步Lambda表达式转换为委托类型
'Func<string>'
。异步Lambda表达式可能返回void
,Task
或Task<T>
,都无法转换为'Func<string>'
能否请我在不更改GetTheID
代表的签名的情况下解决此错误(我的意思是不将其签名更改为Func<Task<string>>
)?
答案 0 :(得分:3)
您必须更改GetTheID
的签名,没有其他方法。因此,正如错误所建议的那样,您需要将GetTheID
的类型更改为Func<Task<string>>
,它必须返回Task
或Task<T>
才能等待:
public static Func<Task<string>> GetTheID;
答案 1 :(得分:1)
您似乎正在尝试使异步方法以同步方式工作。
如果这是正确的上下文,则您的方法可能是
void Main()
{
GetTheID = () => GetMyId().Result;
Console.WriteLine(GetTheID.Invoke());
}
答案 2 :(得分:0)
使用此:
void Main()
{
GetTheID = () => GetMyId().GetAwaiter().GetResult();
Console.WriteLine(GetTheID);
}