我是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>>
)的情况下修复此错误吗?
4条答案
按热度按时间nhaq1z211#
你必须改变
GetTheID
的签名,没有其他的方法,所以正如错误提示,你需要改变GetTheID
的类型为Func<Task<string>>
,它必须返回一个Task
或Task<T>
,以便能够等待它:kg7wmglp2#
从C# 7.1开始,您实际上可以拥有一个异步
Main()
函数,它使您能够在所描述的情况下使用await
:amrnrhlw3#
看起来您正在尝试将异步方法调整为以同步方式工作。
如果这是正确的上下文,您的方法可以是
xnifntxz4#
使用此: