在webforms中异步调用多个服务器操作

时间:2012-10-23 19:05:58

标签: c# asp.net asynchronous webforms

我的网站上有一个操作,要求我检查多个Web服务器并汇总结果。目前,这是针对foreach中的每个Web服务器同步完成的,这可能会很慢,具体取决于Web服务器的响应速度。

我喜欢做的是每个请求都是异步的,并在所有结果全部完成后汇总。

我的问题是 - 使用ASP.NET Webforms,最好的方法是什么?有什么我应该避免的吗?

每个请求可能需要2秒钟,所以我想同时将它们全部打开。

3 个答案:

答案 0 :(得分:2)

这听起来非常关心“标准”asynchronous IO或“标准”线程IO。

T代表{time1, time2, ..},这会使响应O(max(T))而不是O(sum(T)) - 假设没有顺序依赖或其他瓶颈。

这可以使用

完成

异步IO - IO不阻塞线程的地方

同步IO,但有线程 - IO阻止单个线程

  • .NET4中的TPL
  • 或“旧手册”threading/pooling(链接的帖子具有相同的“要求”)

使用的.NET版本和可用于获取外部数据的API是一种因素,[更多]是合适的。

答案 1 :(得分:0)

我会使用jQuery对服务器进行异步AJAX调用。但是,我会使用ashx处理程序而不是WebForm来处理服务器上的AJAX调用并将数据发送回客户端; ashx处理程序比WebForms更轻量级。以下是编写ASHX handlershttp://www.dotnetperls.com/ashx的快速教程 这对你有帮助吗?

答案 2 :(得分:0)

如果您使用的是.NET Framework 4,则可以使用Task并行库来实现此目的。假设GetDataFromServer是您必须为不同服务器调用的方法,您可以执行类似于以下逻辑的逻辑来从所有服务器获取数据:

var d1 = Task.Factory.StartNew(() => GetDataFromServer("server1"));
var d2 = Task.Factory.StartNew(() => GetDataFromServer("server2"));
var d3 = Task.Factory.StartNew(() => GetDataFromServer("server3"));
var d4 = Task.Factory.StartNew(() => GetDataFromServer("server4"));

TaskCoordinator.WhenAll(new Task[] {d1, d2, d3, d4});

上面的步骤异步调用所有四种方法。它将等待所有这些完成。每个操作的结果存储在相应Result对象的Task属性中。因此,您可以使用d1.Result,d2.Result等获取结果,以便对从方法调用获得的结果执行逻辑。

相关问题