Asp.Net 中的异步死锁
首先大概介绍下async和await这两个关键字。
在.Net 4.5中,微软为了方便异步编程提供了async和await这两个关键字,使用他们,可以使我们很方便的实现自己的异步代码,而不用太去关心其内部原理。那么他们的主要作用使什么呢?
async关键字加在方法的声明上,他的主要目的使为了使方法内部的await关键字生效。而方法的返回值也一般是Task或者Task<T>类型。这些Task类型一般相当于是future,用来在异步方法结束时通知主程序。如下面示例代码:
public async Task DoSomethingAsync()
{
int val = 1;
await Task.Delay(TimeSpan.FromSeconds(1));
val *= 3;
await Task.Delay(TimeSpan.FromSeconds(2));
Console.WriteLine(val);
}
和同步方法一样,async方法在开始时候以同步方式执行。在async方法内部,await关键字对他对参数执行了一个异步等待,他首先检查操作是否已经完成,如果完成了,则继续执行。否则,他会暂停async方法,并返回,留下一个未完成的task。一段时间操作完成后,async方法恢复执行。
当异步方法在await处暂停时,就可以捕捉上...