Я использую MVC4 ApiController для загрузки данных в Azure Blob. Вот пример кода:Использовать Task.Factory.StartNew в MVC 4 async ApiController?
public Task PostAsync(int id)
{
return Task.Factory.StartNew(() =>
{
// CloudBlob.UploadFromStream(stream);
});
}
Имеет ли этот код смысл? Я думаю, что ASP.NET уже обрабатывает запрос в рабочем потоке, поэтому запуск UploadFromStream в другом потоке не имеет смысла, поскольку теперь он использует два потока для запуска этого метода (я предполагаю, что исходный рабочий поток ожидает этого UploadFromStream чтобы закончить?)
Итак, я понимаю, что async ApiController имеет смысл только в том случае, если мы используем некоторые встроенные async-методы, такие как HttpClient.GetAsync или SqlCommand.ExecuteReaderAsync. Эти методы, вероятно, используют внутренние порты ввода/вывода, чтобы он мог освободить поток при выполнении фактической работы. Поэтому я должен изменить код на это?
public Task PostAsync(int id)
{
// only to show it's using the proper async version of the method.
return TaskFactory.FromAsync(BeginUploadFromStream, EndUploadFromStream...)
}
С другой стороны, если вся работа в методе сообщение является процессор/память интенсивно, то асинхронная версия PostAsync не поможет пропускной способности запросов. Может быть, лучше просто использовать обычный метод public public void Post (int id)?
Я знаю, что вопросов много. Надеюсь, это прояснит мое понимание использования асинхронного использования в ASP.NET MVC. Благодарю.