MVC 和异步部分
MVC and asynchronous partials
我有一个应用程序有几个 (4-7) 到外部端点的 WebService 请求。加载每个请求需要 2-5s。使用 ajax 加载请求并在页面上显示为部分视图。
问题是每个后续请求都在等待前一个请求完成后才开始。
Ajax 允许我在加载它们时显示它们而不冻结页面,但是是否有可能异步加载所有请求?是否可以同时加载所有分部视图?
已解决。
我现在在应用程序启动时启动所有服务,并将它们存储在静态 class:
public static class Settings
{
public static Dictionary<string, Task<Room>> informationHolder =
new Dictionary<string, Task<Room>>();
}
public ActionResult Index(){
foreach (var room in roomList)
{
int index = roomList.IndexOf(room);
Settings.informationHolder.Add(
roomList[index].Email,
System.Threading.Tasks.Task.Run(() => loadRoomData(roomList[index].Email)));
}
}
在此之后,我只是在我的局部视图中等待任务完成:
public async Task<ActionResult> _RoomMeetings(string roomEmail)
{
var room =
await Settings.informationHolder.FirstOrDefault(m => m.Key == roomEmail).Value;
}
仍然可能出现瓶颈,但应用程序加载速度提高了 2 倍。
我有一个应用程序有几个 (4-7) 到外部端点的 WebService 请求。加载每个请求需要 2-5s。使用 ajax 加载请求并在页面上显示为部分视图。
问题是每个后续请求都在等待前一个请求完成后才开始。
Ajax 允许我在加载它们时显示它们而不冻结页面,但是是否有可能异步加载所有请求?是否可以同时加载所有分部视图?
已解决。 我现在在应用程序启动时启动所有服务,并将它们存储在静态 class:
public static class Settings
{
public static Dictionary<string, Task<Room>> informationHolder =
new Dictionary<string, Task<Room>>();
}
public ActionResult Index(){
foreach (var room in roomList)
{
int index = roomList.IndexOf(room);
Settings.informationHolder.Add(
roomList[index].Email,
System.Threading.Tasks.Task.Run(() => loadRoomData(roomList[index].Email)));
}
}
在此之后,我只是在我的局部视图中等待任务完成:
public async Task<ActionResult> _RoomMeetings(string roomEmail)
{
var room =
await Settings.informationHolder.FirstOrDefault(m => m.Key == roomEmail).Value;
}
仍然可能出现瓶颈,但应用程序加载速度提高了 2 倍。