ASP.NET页面,并行运行两个外部服务调用

时间:2015-12-22 12:11:51

标签: asp.net task-parallel-library

我有一个asp.net网页,它从两个Web服务获取数据,主要服务和后备服务。现在连续调用这些服务。在我的盒子上运行时,页面渲染时间通常为6-10秒。 我决定对这些调用进行分析,以便在主服务失败时可以更快地获得后备数据。

Result res = null;
Task<Result> task = new Task<Result>(() => service1.method1());
task.Start();

res = service2.method();
if(res == null || res.Count == 0)
  res = task.Result;

return res;

通过该更改,页面呈现时间显着增长并达到60秒。我添加了一些分析代码,我发现这段代码通常在不到3秒的时间内运行。 所以我怀疑使用Tasks会以某种方式阻碍asp.net基础架构的性能。

什么可能导致严重的性能退化? 是否有更好的方法可以并行运行这两个外部服务调用?

编辑1:我对service2的结果最感兴趣。仅当service2失败时,才会使用service1的结果。但是,如果service2失败,我想最小化service1结果的等待时间。

1 个答案:

答案 0 :(得分:0)

事实证明,在Task内执行的代码称为懒惰初始化单例。如果HttpContext.Current可用,单例的构造函数尝试设置一些缓存。因为HttpContext.Current在Task中不可用,所以单例不使用缓存,这会降低性能。