【发布时间】:2020-01-17 04:02:15
【问题描述】:
我正在尝试像这样使用await 运算符调用异步方法SendParkInfo 方法
await Task.WhenAny(parkList);和await Task.WhenAny(parkInfo);
parkInfo 拥有SendParkInfo 方法对象
这是我的代码的一部分。
public async Task<AvailableParksResponse> GetAvailableParks(IEnumerable<string> parkRegionList)
{
//
var parkList = parkRegionList.Select(x => SendParkInfo(x)).ToList();
var parkListTask = await Task.WhenAny(parkList);
response.ParkInfoList = new List<Task<ParkInfo>> { parkListTask };
var parkInfo = SendParkInfo(id);
var parkTask = await Task.WhenAny(parkInfo);
response.ParkInfo = new List<Task<ParkInfo>> { parkTask };
//
}
public virtual async Task<ParkInfo> SendParkInfo(string id)
{
//
var apiResponse = await apiClient.GetAsync(RequestUri + id);
//
}
是否可以像我调用的方式那样调用SendParkInfo,然后使用await 运算符和Task.WhenAny 方法。或者有没有更好的调用Async SendParkInfo方法的方法
任何帮助或建议将不胜感激。
提前致谢
【问题讨论】:
-
这里似乎有一些编译问题。您正在尝试将
IEnumerable<string> parkList重新定义为IList<Task<ParkInfo>>,这是故意的吗? -
@NathanTaylor 抱歉,我误解了你的问题。 response.ParkInfoList 就像这样 public IEnumerable
> ParkInfo { get;放; } -
你的例子太稀疏了。 GetAvailableParks 中的 id 来自哪里? AvailableParksResponse 如何使用?拥有公园列表但只返回第一个完成的公园有什么意义?
-
Task.WhenAny()需要一个任务集合,但您将它与单个Task<ParkInfo>一起使用,并将SendParkInfo(id)的结果传递给它。 -
为什么需要使用WhenAny?您不能等待 SendParkInfo 吗?
标签: c# .net asp.net-mvc asynchronous async-await