Я работал с Asp MVC 3, и в моем приложении был создан контроллер Async с некоторыми методами, как:Asp MVC и Web Api Async Контроллеры
public void ActionAsync()
{
AsyncManager.OutstandingOperations.Increment();
AsyncManager.Parameters["someResult"] = GetSomeResult();
AsyncManager.OutstandingOperations.Decrement();
}
public JsonResult ActionCompleted(SometResultModel someResult)
{
return Json(someResult, JsonRequestBehavior.AllowGet);
}
И теперь, когда я работаю с MVC4 и Web Api мне нужно создать контроллер с асинхронными действиями, как в MVC 3. на текущий момент это выглядит следующим образом:
public Task<HttpResponseMessage> PostActionAsync()
{
return Task<HttpResponseMessage>.Factory.StartNew(() =>
{
var result = GetSomeResult();
return Request.CreateResponse(HttpStatusCode.Created, result);
});
}
является ли это хорошая идея, чтобы сделать асинхронные действия в Web API, как это или есть какой-то лучший способ это существует?
UPD. Кроме того, если я буду использовать
будет ли это работать в фоновом режиме? И как сделать мою функцию GetSomeResult()
ожидаемой? Это возвращение, что Task<HttpResponseMessage>
не ждет.
Можете ли вы показать мне, как это Действие должно выглядеть так? Я попытался использовать этот http://pastebin.com/NeRKfqDp. И все мои запросы «POST» возвращают «404» –
Factory.StartNew окончательно ошибается в этом контексте, когда вы разворачиваете дополнительный поток (или планируете некоторые дополнительные работа в пуле потоков) в дополнение к потоку, обрабатывающему текущий запрос. Является ли EventModel.PrepareModel возвращением задачи? –
'EventModel.PrepareModel' является функцией void. Итак, если «Factory.StartNew» ошибочно, что я должен использовать для создания асинхронного запроса? –