1

我可以編寫代碼(1)像波紋管如何從Task <HttpResponseMessage>返回結果,以利用Async HttpClient調用?

public Task<HttpResponseMessage> Get(int id) 
{ 
return Task<HttpResponseMessage>.Factory.StartNew(() => 
    Request.CreateResponse(HttpStatusCode.OK, JsonConvert.SerializeObject(model))); 

} 

我可以編寫代碼(第2),如波紋管

public Task<HttpResponseMessage> Put(int id, string value) 
{ 
    return Task<HttpResponseMessage>.Factory.StartNew(() => 
    Request.CreateResponse(HttpStatusCode.OK)); 

} 

我想上面的調用描述將使用Httpclient.PutAsJsonAsync()方法。在.Net 4.0中?

還有其他更好的方法嗎?所以我可以利用異步調用的好處?

+0

@Wouter de Kort:Ref。 [http://stackoverflow.com/questions/15910677/how-to-call-put-method-from-web-api-using-httpclient] – 2013-04-10 19:05:07

回答

2

如果代碼中的操作都不是異步(或阻塞),那麼執行異步操作就沒有意義。在這兩個示例中,操作只是返回一個響應,因此不需要使用Task<HttpResponseMessage>響應,使用HttpResponseMessage就可以。

因此,更直接的問題,是的,你可以編寫這樣的代碼,但它比必要的更復雜,會導致不必要的上下文切換(創建新任務),並且整體性能較差。你可以做到,但你不應該這樣做。

+0

所以,你的意思是,如果我使用任何HttpClient調用Web Api然後只我使用Task 作爲返回類型? – 2013-04-10 19:46:21

+0

如果您想在Web API中進行異步調用,您應該1)不要阻止該調用(例如,通過調用'.Result'); 2)通過將其返回類型標記爲Task來聲明您的操作本身是異步的'。 – carlosfigueira 2013-04-10 19:54:20

+0

感謝您的澄清。 – 2013-04-10 20:00:51

相關問題