簡體   English   中英

為什么此異步控制器動作在調試時掛起?

[英]Why does this async controller action hang while debugging?

自從我開始從一開始就使用ASYNC處理MVC項目以來,所有控制器,數據庫調用等都是異步的,等待着我進入調試地獄。 我從沒有得到有用的調試/異常信息-它已丟失在系統的腸道中。 我必須進入ELMAH或AI才能查看該異常,因為它永遠不會冒泡並結束請求。

在大多數情況下,頁面只會旋轉,直到瀏覽器放棄為止。 我在某處缺少什么嗎? 例如,我在頁面上有一個錯誤(空引用),但是由於頁面是異步的,所以我從來沒有看到異常。

與這里提出的大多數問題都可能導致死鎖的問題不同,此代碼庫中的任何地方都沒有使用.Result。 這是異步的,從頭開始一直貫穿到整個過程。

為了澄清,這是此MVC控制器的確切工作流程。 我進行了一些更改以測試何時掛起以及何時掛起。

調節器

public async Task<ActionResult> Review(Guid id)
{
    var quote = await Quotes.GetQuoteById(id);
    return View();
}

服務

return await Ef.DbSet.Where(d => d.Id == id).FirstOrDefaultAsync();

查看 (第一行)

@{ throw new ApplicationException("you failed"); }

通過上述設置,我將永遠不會看到異常。 它只是掛了。 但是,如果我將控制器更改為此:

return View();
var quote = await Quotes.GetQuoteById(id);

然后我得到了例外。 如果我將服務更改為非異步,我也會遇到異常。 因此,與引用的重復問題不同,我在任何地方都沒有未等待的呼叫。 但是異步/等待是導致瀏覽器掛起的原因。

有辦法調試嗎? 除了有趣的是,這僅在調試期間發生,在生產中,異常將按預期引發。

重新詢問/澄清/不重復這是最初在此處 提出的問題 ,但已作為此問題的重復而關閉,但事實並非如此。 添加了說明以說明為什么不是這樣。 但是由於它們是作為確定的副本關閉的,因此您甚至看不到它,因此我不得不提出一個新問題。

它與Microsoft / Azure的Application Insights有關。 我必須多加研究(因為我剛剛刪除了所有AI參考,並且需要重新安裝才能進行調查),但這可能是我正在對AI進行的一個未等待的異步調用,或者是AI內部的一個錯誤( -發布)。 我只手動打了三個電話給AI,沒有收到關於未等待異步電話的警告,所以我認為情況並非如此,可能是AI或設計中的錯誤。

卸載AI會使異常像往常一樣流動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM