.net web服务的异步调用在服务器上有意义吗?

.net web服务的异步调用在服务器上有意义吗?,.net,web-services,asynchronous,task,.net,Web Services,Asynchronous,Task,在我的web服务器(ASP.NETMVC4)上,我正在另一台服务器上调用web服务(asmx)。我已经从WSDL生成了客户端。有同步方法和异步方法(回调,而不是任务) 我将其转换为面向任务的调用(使用TaskCompletionSource),然后调用wait,如下所示: 公共异步任务GetData() { var tcs=new TaskCompletionSource(); var client=new WebServiceClient(); client.GetDataCompleted+

在我的web服务器(ASP.NETMVC4)上,我正在另一台服务器上调用web服务(asmx)。我已经从WSDL生成了客户端。有同步方法和异步方法(回调,而不是任务)

我将其转换为面向任务的调用(使用
TaskCompletionSource
),然后调用
wait
,如下所示:

公共异步任务GetData() { var tcs=new TaskCompletionSource(); var client=new WebServiceClient(); client.GetDataCompleted+=(发送方,args)=>tcs.SetResult(args.Result); GetDataAsync(); 返回等待任务; } 之后,我到处使用
async
/
wait
。这有什么意义吗?我想,当调用web服务时,我用这个方法保存了一个线程——我说得对吗?web服务客户端在异步加载时是否阻止线程?如果是这样,我可以使用sync methodad来代替:

公共数据对象GetData() { var client=new WebServiceClient(); 返回client.GetData(); } 谢谢


顺便说一句:我正在使用ASP.NETMVC4,目标是.NET4(因为我必须这样做)。对于
async
/
await
兼容性,我使用的是Microsoft.Bcl.async库。

您是对的,使用异步IO在运行时会“保存”一个线程。这是服务器上异步IO的主要优势。(另:)

你该怎么办?如果web服务往往响应缓慢,或者有时有响应缓慢的风险,那么异步是非常有吸引力的。映像10每秒传入的请求和延迟为10秒的web服务(可能是由于性能问题)。然后,你需要100个线程来处理这个负载


另一方面,如果您不担心这些,async将不会给您任何东西。您可以节省一些可能不需要的MB堆栈内存。使用异步也会消耗更多的CPU。您的工作效率会降低(特别是因为您现在需要使此方法的所有调用者也异步。异步是病毒性的。)。

您不能在ASP.NET 4.0上使用
async
/
wait
(即使您使用的是Microsoft.Bcl.async库)因为它们需要更新的
AspNetSynchronizationContext
,仅在ASP.NET 4.5中可用。更多信息。