2013-07-26 47 views
0

我正在做一個ASPNET MVC解決方案,我使用async/await來創建som外部請求。當任務完成時調用Task.WhenAll我有一個ContinueWith,在那裏我堅持一些數據到數據庫。 我對async/await有點新,我發現在ContinueWith實際調用之前,對我的操作的請求返回並更新了UI。這也意味着,如果我需要用戶身份,則必須在具有請求上下文時將其傳遞給繼續。 現在我需要做些特別的事情來確保服務器在返回ActionResult(aspnet mvc)之後實際處理請求嗎?我記得看到了有關RunInBackground的一些信息,但我無法再找到它。任務在請求返回後運行,有什麼顧慮?

在動作的代碼是一樣

await Task.WhenAll(tasks).ContinueWith(OnTagsMetaCollected, result); 


    return Json(result, JsonRequestBehavior.AllowGet); 

首先是讓所有執行一些任務。當全部完成時,我想計算一些新的結果,這些結果在OnTagsMetaCollected內完成,並添加到結果中(列表) 修改後的結果從操作中返回。

我不確定這是最好的結構來解決這個問題,所以任何建議,我會歡迎:)。

回答

3

解決方案很簡單:使用await而不是ContinueWithawait將正確地將請求上下文(包括用戶標識)傳送給方法的其餘部分。

+0

所以我剛剛使用await進行了測試,我想我可能會做一些錯誤的事情,因爲在我的任務完成之前請求仍然返回。看到更新 –

+0

啊,我剛剛刪除了continueWith,正如你所說的那樣,現在看起來工作正常,流程更加乾淨。 –