主要問題:我想在后臺執行一段代碼。請進一步閱讀以了解我所說的“背景”是什么意思。
我正在嘗試通過異步/非阻塞執行緒執行外部資料發布。主要思想是提交表單的用戶無需等待外部請求完成。
目前的流程是這樣的:
- 用戶提交帶有資料的表單
- Action 處理資料執行內部步驟,如資料庫更新、電子郵件通知等,還使用外部資源使用 API 發布資料
- 用戶被帶到“感謝頁面”
我正在嘗試將其UploadFilesToAmazonAWSAndDropBoxAndFlickrAndGoogleDrive與常規用戶流分離,因為在當前設定中,用戶正在等待外部 API 完成。如何UploadFilesToAmazonAWSAndDropBoxAndFlickrAndGoogleDrive在后臺執行緒中運行?
編輯:發布我要修復的代碼的粗略大綱
[HttpPost]
public ActionResult Index(FormCollection fc)
{
//database operations,
InsertIntoDatabase(fc); //takes 1 second
//3rd party posting
//Takes about 30 seconds.
//Why it takes 30 seconds is obvious. Please let me know if this isn't obvious.
UploadFilesToAmazonAWSAndDropBoxAndFlickrAndGoogleDrive(fc);
//email operations
SendEmails(fc); //takes 1 second
//User is taken to Thank you page after 32 seconds. I want to reduce the time to 2 seconds
return View("ThankYou");
}
uj5u.com熱心網友回復:
根據您編輯的場景和目標,以下高級選項可能會幫助您實作目標。
- 您可以使用 Task.Run 為您的
PostDataToExternalResources方法啟動后臺執行緒,但您仍然需要管理任何例外等。此外,如果您這樣做,我不會將表單集合傳遞給該方法,請記住,您無法保證結果 - 您可以使用HangFire 之類的東西將該程序轉換為后臺作業,它具有自己的持久性等。我再次不會傳遞 FormCollection,但它可以具有更好的持久性。
由于查看“謝謝”頁面似乎不依賴于任務的完成,我會看一些像 HangFire 這樣持久/可執行的東西,以保持一致性和易于管理
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/415887.html
標籤:
