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