C# 4.0 如何从任务返回结果<;HttpResponseMessage>;,利用异步HttpClient调用的好处?

C# 4.0 如何从任务返回结果<;HttpResponseMessage>;,利用异步HttpClient调用的好处?,c#-4.0,asp.net-web-api,task-parallel-library,dotnet-httpclient,C# 4.0,Asp.net Web Api,Task Parallel Library,Dotnet Httpclient,我可以像下面那样编写代码(第一个) public Task<HttpResponseMessage> Get(int id) { return Task<HttpResponseMessage>.Factory.StartNew(() => Request.CreateResponse(HttpStatusCode.OK, JsonConvert.SerializeObject(model))); } public Task<HttpResponse

我可以像下面那样编写代码(第一个)

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

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

}
公共任务获取(int-id)
{
返回Task.Factory.StartNew(()=>
CreateResponse(HttpStatusCode.OK,JsonConvert.SerializeObject(model));
}
我可以像下面那样编写代码(第二个)

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

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

}
公共任务Put(int-id,字符串值)
{
返回Task.Factory.StartNew(()=>
CreateResponse(HttpStatusCode.OK));
}
我希望使用
Httpclient.PutAsJsonAsync()
调用上述Put方法。在.NET4.0中


或者有更好的方法吗?因此,我可以利用异步调用的好处吗?

如果代码中的任何操作都不是异步的(或阻塞的),那么使用异步操作是没有意义的。在前面的两个示例中,操作只返回一个响应,因此不需要使用
任务
响应,使用
HttpResponseMessage
就可以了


因此,更直接地回答您的问题,是的,您可以编写这样的代码,但它比必要的更复杂,会导致不必要的上下文切换(创建新任务),并且总体性能较差。您可以这样做,但不应该这样做。

如果代码中的任何操作都不是异步的(或阻塞的),那么使用异步操作是没有意义的。在前面的两个示例中,操作只返回一个响应,因此不需要使用
任务
响应,使用
HttpResponseMessage
就可以了


因此,更直接地回答您的问题,是的,您可以编写这样的代码,但它比必要的更复杂,会导致不必要的上下文切换(创建新任务),并且总体性能较差。你可以这样做,但你不应该这样做。

@Wouter de Kort:Ref.[@Wouter de Kort:Ref.[所以你的意思是,如果我在Web Api中使用任何HttpClient调用,那么我只使用
任务
作为返回类型?如果你想在Web Api中进行异步调用,你不应该1)阻止该调用(例如,通过调用
.Result
)2)通过将其返回类型标记为
Task
,声明您的操作本身是异步的。感谢您的澄清。如果在Web API中,我必须返回一个简单响应(HttpStatusCode)&
Httpclient.PutAsJsonAsync()
基于条件的调用然后返回类型应该是什么使用
Task
或normal
HttpResponse
所以你的意思是如果我在Web Api中使用任何HttpClient调用,那么我只使用
Task
作为返回类型?如果你想在Web Api中进行异步调用,你不应该1)阻止该调用(例如,通过调用
.Result
)和2)通过将其返回类型标记为
Task
,声明您的操作本身是异步的。感谢您的澄清。如果在Web API中,我必须返回一个简单响应(HttpStatusCode)&
Httpclient.PutAsJsonAsync()
根据条件调用,然后返回类型应该是什么使用
任务
或正常
HttpResponse