异步/等待:使方法异步
本文关键字:异步 方法 等待 | 更新日期: 2023-09-27 18:31:07
我正在尝试做一个简单的示例,但我什至没有得到基础知识。这段代码有什么问题?想象一下Calculate()
需要几秒钟。
static void Main(string[] args)
{
int result = await Calculate();
Console.WriteLine(result);
Console.ReadLine();
}
static async Task<int> Calculate()
{
return 1;
}
只需将您的 main 更改为:
static void Main(string[] args)
{
int result = Calculate().Result;
Console.WriteLine(result);
Console.ReadLine();
}
一旦您使用await
关键字,就必须将周围的方法标记为async
- 正如其他人所指出的那样 - 对于Main
是不可能的。由于像Calculate
这样的async
方法仍然返回良好的旧Task
对象,因此请随意使用"旧"的方式来处理它们:使用Result
等待结果。当然,这是一个阻塞操作 - 但没有理由在Main
内部不阻塞,对吧?;)
你可以这样做:
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;
});
}