我有一个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结果的等待时间。
答案 0 :(得分:0)
事实证明,在Task
内执行的代码称为懒惰初始化单例。如果HttpContext.Current可用,单例的构造函数尝试设置一些缓存。因为HttpContext.Current在Task
中不可用,所以单例不使用缓存,这会降低性能。