【问题标题】:ASP.NET C# Async - Correct solution for background HTTPRequests?ASP.NET C# Async - 后台 HTTPRequests 的正确解决方案?
【发布时间】:2014-07-09 22:38:20
【问题描述】:

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

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

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

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

【问题讨论】:

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


【解决方案1】:

您可以在 Web 服务调用中对每个第 3 方 Web 服务进行异步调用,然后等待它们,以便它们同时运行。但是,如果您需要等待所有响应并处理数据等,然后才能将结果返回给客户端,那么如果等待来自 3rd 方服务调用的所有结果并进行自己的处理需要太长时间并且它会超时除非您可以在异步调用 3rd 方服务后立即返回一个简单的响应,这只是表明请求已提交但不一定成功完成,否则您实际上无能为力。

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 2018-08-30
      相关资源
      最近更新 更多