asp.net的ashx中这样用async/await 为什么不死锁了啊
下面这段代码理论上不是应该产生死锁吗,放到winform中完美死锁,但是放到ashx中就没有死锁,这是什么情况啊
public class Req : IHttpHandler {
public void ProcessRequest(HttpContext context) {
GetResult();
context.Response.ContentType = "text/plain";
context.Response.Write("hello world");
}
private string GetResult() {
return AAA().Result;
}
async Task<string> AAA() {
return await BBB();
}
async Task<string> BBB() {
await Task.Delay(100);
return "为什么不会死锁呢";
}
public bool IsReusable {
get {
return false;
}
}
}
回答
放在aspx页面中试下,死锁的原因是UI主线程跟异步线程之间的互持等待,这个也仅限于core之前的asp.net,winform这些,但ashx应该不同于aspx有ui主线程,没有synchornizedContext(猜测),具体的需要翻源码