我不明白我在哪里错过了异步\await



我的代码返回Task<List<...>>。从Task<List<...>>List<...>存在类型转换错误。

请告诉我,我在哪里没有完成等待?

public async Task<List<DepartamentsResponse>> Handle(GetDepartmentsRequest token, CancellationToken cancellationToken)
{
var departments = await _departmentApiClient.GetReception(token.accessToken, OdpgDepartmentType.Reception);
var result = departments.ConvertAll(async d => new DepartamentsResponse
{
FederalDistrict = GetFederalDistrictCode(d.FederalRegion.DistrictCode),
SubjectName = d.Name,
Supervisor = GetDirector(d.Users.Where(u => u.InOdpgRole(OdpgUserRole.Director)).FirstOrDefault()),
ContactsSupervisor =  GetContacts(d.Users.Where(u => u.InOdpgRole(OdpgUserRole.Director)).FirstOrDefault()),
Schedule = "C 9:00 18:00",
ReceptionContacts = await GetAddressAsync(d.Addresses.FirstOrDefault(d => d.AddressType == DepartmentAddressType.Reception), token)
});
return result;
}
private async Task<string> GetAddressAsync(DepartmentAddressDto? address, GetDepartmentsRequest token)
{
if (address != null)
{
var fullAddress = await  _fiasApiClient.GetFullAddress(token.accessToken,
new ESOG.Fias.Api.Model.GetFullAddressRequest
{ BaseAddressId = address.FiasId, Building = address.Building, Room = address.Room });
//var res = JsonConvert.DeserializeObject<DepartmentAddress>(fullAddress);
return fullAddress;
}
return "";
}

GetFederalDistrictCodeGetDirectorGetContacts——这些方法不是异步

它应该只返回List<>,而不是Task<List<>>

您对departments.ConvertAll的调用返回List<Task<DepartamentsResponse>>,但您需要Task<List<DepartamentsResponse>>

查看Task.WhenAll方法,了解如何将Task的集合转换为返回集合的单个Task。然后await,即单个Task,并构建您的最终列表。

最新更新