閱讀之後Best Practices in Asynchronous Programming 我決定測試MVC4中的死鎖行爲。來自Intranet模板創建的網站後,我修改了索引操作是這樣的:如何監視MVC4中的異步/等待死鎖?
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();
}
}
}
到指數的調用如我所料,但我也期待一個例外,在某些時候被拋出掛起。異常不會被拋出,所有請求都會掛起。
我查看了所有可用的性能計數器,但無法弄清楚如何識別死鎖。如果我要與使用異步/等待的現有網站合作,如何設置潛在的死鎖監控?
謝謝!
爲什麼你會期望死鎖拋出異常? – svick
@svick:你是對的,我不應該期待一個例外,誤讀我引用的文章。不過,我想知道是否有可能以某種方式監控死鎖。謝謝! –
偉大的問題。我認爲這更多地涉及多線程,而不是直接與異步/等待設施相關。我認爲你唯一的選擇是設計某種形式的監控。我不知道使用C#或運行時的自動行爲。 –