我有一个MVC应用程序。我有这样的情况 - 我需要从多个API中提取数据。
public class MVCController : Controller
{
// MVC controller calling WebApis to bring data.
public async Task<ActionResult> Index()
{
var response1 = await client.GetAsync("webapi/WebApiController1/Method1");
var response2 = await client.GetAsync("webapi/WebApiController2/Method2");
var response3 = await client.GetAsync("webapi/WebApiController3/Method3");
var response4 = await client.GetAsync("webapi/WebApiController4/Method4");
}
}
我觉得自从每次打电话给webApi都等待,它没有给我带来任何好处。无论如何,在我们继续下一次通话之前,我们将不得不等待数据到来。例如,第一次调用必须等到它返回响应1,依此类推。如果我错了,请纠正我。
有没有办法可以并行执行这4个语句,因为其中任何一个都没有依赖关系,如果我最终可以在将模型传递给视图之前等待在底部?
如果有任何方法可以做到这一点而没有将不完整/部分数据传递给View并同时从这些Web API调用中获取数据的风险?
答案 0 :(得分:4)
有什么方法可以并行执行这4个语句
是的,它被称为Task.WhenAll
:
public async Task<ActionResult> Index()
{
var response1 = client.GetAsync("webapi/WebApiController1/Method1");
var response2 = client.GetAsync("webapi/WebApiController2/Method2");
var response3 = client.GetAsync("webapi/WebApiController3/Method3");
var response4 = client.GetAsync("webapi/WebApiController4/Method4");
await Task.WhenAll(response1, response2, response3, response4);
// You will reach this line once all requests finish execution.
}
这样,您可以同时执行4个任务并等待它们完成。一旦完成接收请求,该方法将继续执行。