我有这段简单的代码:
public static async Task<int> SumTwoOperationsAsync()
{
var firstTask = GetOperationOneAsync();
var secondTask = GetOperationTwoAsync();
return await firstTask + await secondTask;
}
private async Task<int> GetOperationOneAsync()
{
await Task.Delay(500); // Just to simulate an operation taking time
return 10;
}
private async Task<int> GetOperationTwoAsync()
{
await Task.Delay(100); // Just to simulate an operation taking time
return 5;
}
很好。这可以编译。
但是假设我有一个控制台应用程序,并且我想运行上面的代码(调用SumTwoOperationsAsync()
)。
static void Main(string[] args)
{
SumTwoOperationsAsync();
}
但是我读到(当使用sync
时)必须同步全部进行上和下:
这是否意味着我的Main
函数应该标记为async
?
好吧,不行,因为会有编译错误:
入口点不能标记为'async'修饰符
如果我理解异步的东西,线程将进入Main
函数→SumTwoOperationsAsync
→将调用两个函数并退出。但在SumTwoOperationsAsync
之前,线程仍然会阻塞。
我错过了什么吗?