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
中不可用,单例没有使用缓存,这降低了性能。
我有一个 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
中不可用,单例没有使用缓存,这降低了性能。