我有一些代碼,它導入一個csv文件並從數據創建數據庫記錄。使用標準的同步方法可以正常工作,但大型csv文件可能需要一段時間才能處理。使用異步等待,我想csv處理異步運行,所以用戶不會卡在上傳表單,直到處理完成。MVC異步等待長時間運行的數據庫插入/更新
因此,用戶將上傳文件並立即轉移到一個頁面,該頁面將顯示一條消息以指示該文件正在導入。
這是我試過的。這是我的控制器的行動,獲取表單POST:在本
public async Task<ActionResult> UploadBulkImportFile(BulkUploadCsvModel model, HttpPostedFileBase file)
{
...
我打電話,我要異步運行的功能:
await Task.Run(() => testAsyncMethod(csvmodel));
的testAsyncMethod()做了所有的數據庫CRUD參與操作處理csv。
public void testAsyncMethod(IEnumerable<List<csvmodel>> model)
{
...
此代碼的工作,但我前面的同步代碼沒有什麼不同,即用戶仍然必須等待,直到該文件被完全處理,所以它顯然不正常。請注意,testAsyncMethod()中的代碼不是異步代碼,只是標準的數據庫調用 - 我想知道如果這是我出錯的地方。
這甚至可能在MVC?我是否使用異步等待錯誤的原因?
這不是如何異步工作... –
@ErikFunkenbusch - 照顧開導我? – markpsmith
斯蒂芬的博客文章,他鏈接到下面明確解釋...但是,異步允許*服務器*繼續做其他事情,而不是客戶端(網絡瀏覽器) –