Я не завидую вам, поскольку это выглядит ужасно плохой базой кода, только эти несколько строк страдают от множества проблем.
Одна из самых больших из них - то, что вы не должны запускать работу, связанную с процессором, используя Task.Run в ASP.NET.Это , что Стивен Клири пишет об этом :
Асинхронизация и ожидание в ASP.NET - все о вводе / выводе.Они действительно преуспели в чтении и записи файлов, записей базы данных и API REST.Тем не менее, они не подходят для задач, связанных с процессором.Вы можете начать некоторую фоновую работу, ожидая Task.Run, но в этом нет никакого смысла.Фактически, это фактически повредит вашей масштабируемости, мешая эвристике пула потоков ASP.NET.Если у вас есть работа с процессором в ASP.NET, лучше всего выполнить ее непосредственно в потоке запросов.Как правило, не помещайте работу в пул потоков в ASP.NET.
(я рекомендую прочитать его статьи , так как это отличный источник асинхронной / awaitзнание.)
Итак, ваш код очищен:
ut.ModelJSON = _userTransactionService.ConvertToModelJson(typeof(UserDocument).Name, "", transactionDocs);
_genericUploadService.AddUserDocuments(ut, docs);
List<GenericUploadDocumentViewModel> viewModel = GetDocVM();
return Json(viewModel, JsonRequestBehavior.AllowGet);
Однако я подозреваю, что _genericUploadService.AddUserDocuments и GetDocVM делают некоторые операции ввода-выводаO связанная работа (например, работа в сети или доступ к БД).Если вы хотите улучшить производительность своего кода, вам следует переписать их как асинхронные, тогда вы можете получить следующее:
ut.ModelJSON = _userTransactionService.ConvertToModelJson(typeof(UserDocument).Name, "", transactionDocs);
await _genericUploadService.AddUserDocumentsAsync(ut, docs);
List<GenericUploadDocumentViewModel> viewModel = await GetDocVMAsync();
return Json(viewModel, JsonRequestBehavior.AllowGet);