ASP.NET C#异步 - 针对后台HTTPRequests的正确解决方案?

时间:2014-07-09 01:13:55

标签: c# asp.net web-services asynchronous

我有一个从第三方调用的ASMX方法。此方法将多个httprequest发送到各种源,聚合数据,然后将所述数据推送到第三方API。由于数据量和延迟不同,调用ASMX的请求会间歇性地超时。我想在调用ASMX之后,可以异步启动剩余的进程,只返回对原始调用者的响应。我一直在阅读Async / Await文档,但是没找到我正在寻找的东西,这意味着我错过了什么,或者我试图做错了。

1)Async是我正在尝试做的正确解决方案吗?

2)如果没有,有人可以帮我指出正确的方向吗?

在这里原谅高级别和缺乏代码 - 我知道我正在尝试做什么,但显然不是如何,而.NET不是我的强项。 :)干杯 -

2 个答案:

答案 0 :(得分:1)

您可以做的是在您的Web服务调用内部对每个第三方Web服务进行异步调用,然后等待它们以便它们同时运行。但是,如果您需要等待所有响应并处理数据等,然后才能将结果返回给客户端,那么如果等待第三方服务调用的所有结果并且执行您自己的处理需要花费太长时间并且超时则除非您可以在异步调用第三方服务之后立即返回一个简单的响应,只是表明请求已提交但尚未成功完成,否则您无法做多少事情。

答案 1 :(得分:0)

  

1)Async是我正在尝试做的正确解决方案吗?

没有。正如我在博客中描述的那样async does not change the HTTP protocol

  

2)如果没有,有人可以帮我指出正确的方向吗?

首先,在没有请求上下文is dangerous的情况下在ASP.NET上运行任务。也就是说,我在博客上为fire-and-forget on ASP.NET提供了一些选项。最简单的解决方案可能是HangFire或HostingEnvironment.QueueBackgroundWorkItem