我正在尝试在asp.net中学习有关异步控制器的一些信息
所以我创建了一个控制器:
[Route("api/[controller]")]
public class SummonerController : Controller
{
[HttpGet("[action]/{name}")]
public async Task<SummonerDTO> GetSummonerData(string name)
{
SummonerEndPoint endPoint = new SummonerEndPoint();
Task<SummonerDTO> data = endPoint.GetSummonerData(name);
var readed = await data;
MatchesEndPoint endPoint2 = new MatchesEndPoint();
var data2 = endPoint2.GetMatches(data.Result.accountId.ToString());
var readed2 = await data2;
return await endPoint.GetSummonerData(name);
}
}
您可以在第二个请求中看到,我使用了我从第一个请求中接收到的数据。 我知道第二个请求有可能在第一个请求之前得到解决。 所以我的问题是,有没有办法确保在第一个通话结束后触发第二个通话?
将两个结果合并为一个dto是另一回事,但我不会将其放在这个问题上
答案 0 :(得分:0)
如果您await
Task
已经在做,那就很好了。仅当您调用异步方法而未await
时,它们才会重叠。
作为旁注,
var result = await task;
等待任务异步完成并获取结果。
var result = task.Result;
同步等待任务(阻塞线程)。
您可以将代码更改为
var summonerEndPoint = new SummonerEndPoint();
var summonerData = await summonerEndPoint.GetSummonerData(name);
var matchesEndPoint = new MatchesEndPoint();
var matches = await matchesEndPoint.GetMatches(summonerData.accountId.ToString());
return summonerData;