我目前正在使用一个 ASP.NET MVC 应用程序,该应用程序与 10 多个供应商的 API 交互以收集数据。我们当前的方法涉及使用
Task.WaitAll
等待所有 API 调用完成,但这会由于 连接超时 导致 用户体验差。我们如何增强 ASP.NET MVC 应用程序的性能以缓解这些超时并改善用户体验?
我尝试通过使用
Task.WhenAny
以及其他异步处理多个 API 调用的方法来优化我的 ASP.NET MVC 应用程序。尽管做出了这些努力,我还是遇到了持续存在的错误。该视图没有显示任何值,并且错误似乎在没有被捕获的情况下被忽略。此外,控制器还将这些错误传递给视图。如何解决这些问题并确保性能更流畅?
所以请让我知道是否有任何方法可以改进代码。
下面的示例代码:
for (int i = 0; i < sources.Count(); i++)
{
if (sources[i] == "MY" && suppliers.Contains("MY"))
{
supplier = new SabreRest.Flights();
}
if (sources[i] == "MY" && suppliers.Contains("MY"))
{
supplier = new SabreRest.Flights();
}
if (sources[i] == "MY" && suppliers.Contains("MY"))
{
supplier = new SabreRest.Flights();
}
if (sources[i] == "MY" && suppliers.Contains("MY"))
{
supplier = new SabreRest.Flights();
}
if (sources[i] == "MY" && suppliers.Contains("MY"))
{
supplier = new SabreRest.Flights();
}
if (supplier != null)
{
Task myTask = Task.Factory.StartNew(() =>
{
supplier.Search(copyRequest, flightDetails, newpccMatrixList, client, copiednearbyairports);
});
taskList.Add(myTask);
pccMatrixList.ForEach(a => a.IsAvailable = false);
}
}
Task.WhenAll(taskList);
如果您控制所调用的 API,请使其更快或更可靠。如果你不控制它们,那么你需要考虑如果其中一个或多个失败或超时该怎么办。
如果主要的用户体验问题是请求超时所需的时间太长,则减少超时。相反,如果您可以接受较长的等待时间,但又想防止错误,则可以增加超时时间。然而,在后一种情况下,向用户界面添加某种正在进行的指示器可能是个好主意。
如果您只能接受部分 API 响应,您可能会寻求一些更复杂的同步机制。在极端情况下,
Task.WhenAny
只是等待第一个任务完成,这样所有其他任务就会失败。这就是你想要的吗?
处理此类问题的方式通常是使用复合 UI,其中 UI(而不是服务器)发出 n 并发请求,并在响应到达时异步填充每个 UI 元素。