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

ASP.NET page, running two external service calls in parallel

我有一个 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 结果的时间。

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