在阅读了异步编程的最佳实践之后, 我决定测试 MVC4 中的死锁行为。从 Intranet 模板创建网站后,我修改了 Index 操作,如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using System.Web.Mvc;
namespace AsyncAwait.MVC4.Controllers
{
public class HomeController : Controller
{
private static async Task DelayAsync()
{
await Task.Delay(1000);
}
// This method causes a deadlock when called in a GUI or ASP.NET context.
public static void Test()
{
// Start the delay.
var delayTask = DelayAsync();
// Wait for the delay to complete.
delayTask.Wait();
}
public ActionResult Index()
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
Test();
return View();
}
}
}
对 Index 的调用按我的预期挂起,但我也希望在某个时候抛出异常。但是,永远不会抛出异常,所有请求都会挂起。
我查看了所有可用的性能计数器,但无法弄清楚如何识别死锁。如果我要使用使用 async/await 的现有网站,我该如何设置对潜在死锁的监控?
谢谢!