У меня есть приложение MVC 4.0, ориентированное на targetFramework = "4.5".Async не работает в асинхронном контроллере mvc 4.0
Я должен в основном преобразовать существующую функциональность обработки файлов с синхронной асинхронной (так что для большого пользователя файла не нужно ждать другой задачи).
Мой код
[HttpPost]
public async Task<ActionResult> FileUpload(HttpPostedFileBase fileUpload)
{
Coreservice objVDS = new Coreservice();
//validate the contents of the file
model =objVDS. ValidateFileContents(fileUpload);
// if file is valid start processing asynchronously
await Task.Factory.StartNew(() => { objVDS.ProcessValidFile(model); }, CancellationToken.None,
TaskCreationOptions.DenyChildAttach,
TaskScheduler.FromCurrentSynchronizationContext());
return view();
}
В основном я хочу, чтобы вызвать асинхронный метод, который в сфере услуг, который делает операции с базами данных (diffrent проект).
Я хочу, чтобы асинхронный процесс имел доступ к контексту в методах служб. Вот почему я использую TaskScheduler.FromCurrentSynchronizationContext()
в Task.Factory.StartNew()
.
метод Услуга, как следующий, в котором, в зависимости от типа файла, второй сервис вызывался для операций с данными
public async task ProcessValidFile(fileProcessDataModel model)
{
employeeWorkedDataservice service =new employeeWorkedDataservice()
await Task.Factory.StartNew(() =>
{
service .ProcessEmployeeDataFile(model.DataSetToProcess, OriginalFileName, this, model.Source);
},
CancellationToken.None,
TaskCreationOptions.DenyChildAttach,
TaskScheduler.FromCurrentSynchronizationContext());
}
ProcessEmployeeDataFile
возвращает недействительным и его не асинхронной метод. При выполнении вышеуказанного кода он не возвращается к контроллеру до завершения обработки данных. Я думаю, что здесь что-то не хватает. Пожалуйста, направляйте меня к решению.
Спасибо, Amol
Предполагаете, что вы уже прочитали https://msdn.microsoft.com/en-us/library/hh191443.aspx? – Nzall
Да; я что-то упускаю? – amol