問題:Request.Content.ReadAsMultipartAsync never returns

應用於使用FormData封包上傳(多段MIME)檔案時會卡住的狀況。有人查出原因是執行緒被自已鎖住。

修正前程式碼

/// 使用FormData封包上傳檔案之失敗例子
[HttpPost]
public string UploadFileSample_BAD()
{
    try
    {
        bool isMimeContent = Request.Content.IsMimeMultipartContent();
        var provider = Request.Content.ReadAsMultipartAsync().Result; 
        /// 使用 Task.Wait/Task.Result 同步語法將會自己鎖死自己的thread! Orz
        /// 然而改用 async/await 非同步語去就正常了。
        
        ...
        
        return $"SUCCESS";
    }
    catch (Exception ex)
    {
        return "我失敗了嗚嗚!";
    }
}

修正後程式碼

改用非同步語法(async/await)即可避開此問題。

參考

Last updated