我的理解是以下内容是不好的实践,因为它会阻塞线程:
虽然以下内容不会阻塞线程:
Task t = Task.Run(() => MyMethod());
t.Wait();
虽然以下内容不会阻塞线程:
await MyMethod();
然而,要使用await,必须在方法签名中使用async关键字,并返回一个 Task
而不是void或Task<T>
.
然而,在n-Tier应用程序中,如果您有一个巨大的调用堆栈,那么我们是否必须像LinqPad中的以下简单示例中所示,将每个调用方法都设置为异步/任务?
async void Main()
{
int i = await GetNumberD();
i.Dump();
}
async Task<int> GetNumberD()
{
return await GetNumberC();
}
async Task<int> GetNumberC()
{
return await GetNumberB();
}
async Task<int> GetNumberB()
{
return await GetNumberA();
}
async Task<int> GetNumberA()
{
await Task.Delay(TimeSpan.FromSeconds(1));
return 7;
}