我變爲Asp MVC 3個工作,並在我的應用程序創建異步控制器,像一些方法:天冬氨酸MVC和網絡API異步控制器
public void ActionAsync()
{
AsyncManager.OutstandingOperations.Increment();
AsyncManager.Parameters["someResult"] = GetSomeResult();
AsyncManager.OutstandingOperations.Decrement();
}
public JsonResult ActionCompleted(SometResultModel someResult)
{
return Json(someResult, JsonRequestBehavior.AllowGet);
}
而現在,當我與MVC4和網絡工作API,我需要像MVC 3,在當前的時間它的創建與異步操作控制器的樣子:
public Task<HttpResponseMessage> PostActionAsync()
{
return Task<HttpResponseMessage>.Factory.StartNew(() =>
{
var result = GetSomeResult();
return Request.CreateResponse(HttpStatusCode.Created, result);
});
}
它是一個好主意,使在網頁API異步操作這樣或者有一些更好的方法是存在的?
UPD。另外,如果我將使用
public async Task<HttpResponseMessage> ActionAsync()
{
var result = await GetSomeResult();
return Request.CreateResponse(HttpStatusCode.Created, result);
}
這個完整的動作將在後臺線程中工作嗎?以及如何使我的GetSomeResult()
函數等待?這是Task<HttpResponseMessage>
不等待的回報。
你能告訴我這是怎麼回事行動應該看起來像?我嘗試過使用這個http://pastebin.com/NeRKfqDp並且我所有的'POST'查詢都返回「404」 – 2013-04-29 14:49:13
Factory.StartNew在這個上下文中肯定是錯誤的,因爲你正在旋轉一個額外的線程(或者調度一些額外的在線程池中工作)以及當前處理當前請求的線程。 EventModel.PrepareModel是否返回任務? – 2013-04-29 16:21:54
'EventModel.PrepareModel'是一個void函數。所以,如果'Factory.StartNew'錯了,我應該用什麼來發出異步請求? – 2013-04-30 07:27:40