c# - 解决另一个异步调用后触发一个异步调用
问题描述
我正在尝试在 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 中是另一回事,但我不会把它放在这个问题上
解决方案
如果你已经await
在Task
做,那你很好。await
如果您调用 async 方法而不是它,它们只会重叠。
作为旁注,
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;
推荐阅读
- selenium - 如何禁用插件中的首次运行页面 - selenium - firefox - java
- extjs - Ext.tab.Panel 和自动换行
- php - 多重上传功能不会向服务器发送很多文件
- python - 如何解决 Python 3 包问题
- javascript - 如何让wordpress标签输入框按回车键添加标签?
- javascript - 如何在 extJS 子表中插入复选框列
- python-3.x - Pyspark 数据帧,在标志之间迭代,基于组
- c - 嵌套数组的初始化?
- java - Java 11 类文件规范
- python - 低维非线性优化问题的许多参数集的有效(例如矢量化)数值解