在另一个异步呼叫解决后触发一个异步呼叫

时间:2018-06-20 19:52:46

标签: c# async-await

我正在尝试在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是另一回事,但我不会将其放在这个问题上

1 个答案:

答案 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;