主要問題。有一個代碼塊,我想在后臺執行。請進一步閱讀以理解我所說的 "后臺 "的含義。
我正試圖通過一個異步/非阻塞執行緒來執行外部資料的發布。主要的想法是,提交表單的用戶不需要等待外部請求的完成。
當前的流程是這樣的:
我正試圖將UploadFilesToAmazonAWSAndDropBoxAndFlickrAndGoogleDrive從常規的用戶流中解耦出來,因為在當前的設定中,用戶正在等待外部API的完成。如何使UploadFilesToAmazonAWSAndDropBoxAndFlickrAndGoogleDrive在一個后臺執行緒中運行呢?
編輯:貼出我試圖修復的代碼的大致輪廓
[]
public ActionResult Index(FormCollection fc)
{
/資料庫操作,
InsertIntoDatabase(fc); //takes 1 second
//3rd party posting。
//Takes about 30 seconds.
//Why it takes 30 seconds is obvious. 如果這不明顯,請讓我知道。
UploadFilesToAmazonAWSAandDropBoxAndFlickrAndGoogleDrive(fc)。
//電子郵件操作
SendEmails(fc); //需要1秒。
//用戶在32秒后被帶入感謝頁面。我希望將時間減少到2秒。
return View("ThankYou")。
}
uj5u.com熱心網友回復:
基于你編輯的場景和目標,以下的高級選項可能會讓你達到目的。
- 你可以使用Task.com.cn來實作。
- 你可以使用Task.Run為你的
PostDataToExternalResources方法啟動一個后臺執行緒,但你仍然需要在你這邊管理任何例外等。 此外,如果你這樣做,我不會將表單集合傳遞給該方法,只是要記住,你將無法保證結果 。
- 您可以使用HangFire之類的方法,將該流程轉變成一個后臺作業,它有自己的耐久性等。 我同樣不會將表單集合傳入,但它可以有更好的耐久性。
由于查看 "感謝 "頁面似乎并不取決于任務的完成情況,因此我會考慮使用像 HangFire 這樣耐用/可執行的工具,以實作一致性并便于管理
。轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/320345.html
標籤:
