我正在尝试做一个简单的例子,但我甚至没有得到基础知识。这段代码出了什么问题?想象一下Calculate()
需要几秒钟。
static void Main(string[] args)
{
int result = await Calculate();
Console.WriteLine(result);
Console.ReadLine();
}
static async Task<int> Calculate()
{
return 1;
}
答案 0 :(得分:4)
只需将您的主要内容更改为:
static void Main(string[] args)
{
int result = Calculate().Result;
Console.WriteLine(result);
Console.ReadLine();
}
只要您使用await
关键字,就必须将周围的方法标记为async
,而Main
无法将其作为其他方法。
由于async
等Calculate
方法仍会返回旧的Task
对象,因此请随意使用“旧”方式处理它们:使用Result
等待结果。当然这是一个阻塞操作 - 但没有理由在Main
内部进行非阻塞,对吧? ;)
答案 1 :(得分:0)
你可以这样做:
static void Main()
{
WrapMain();
}
static async void WrapMain()
{
int result = await Calculate();
Console.WriteLine(result);
Console.ReadLine();
}
static async Task<int> Calculate()
{
return await Task.Run(() =>
{
return 1;
});
}