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