C# 将一个异步方法的输出链接为另一个异步方法c的输入
我有下面的代码部分,其中SavePersonAsync方法调用了3个外部方法,有人能告诉我异步/等待方法的实现是正确实现的吗。是否有任何异步/等待未正确实现的调用链C# 将一个异步方法的输出链接为另一个异步方法c的输入,c#,async-await,call,chain,C#,Async Await,Call,Chain,我有下面的代码部分,其中SavePersonAsync方法调用了3个外部方法,有人能告诉我异步/等待方法的实现是正确实现的吗。是否有任何异步/等待未正确实现的调用链 public PersonService(IPersonDbService personDbService, IPersonEntityToPersonModelMapper personEntityToPersonModelMapper, IPersonModelToPersonEntity
public PersonService(IPersonDbService personDbService,
IPersonEntityToPersonModelMapper personEntityToPersonModelMapper,
IPersonModelToPersonEntityMapper personModelToPersonEntityMapper)
{
_personDbService = personDbService;
_personEntityToPersonModelMapper = personEntityToPersonModelMapper;
_personModelToPersonEntityMapper = personModelToPersonEntityMapper;
}
public async Task<IEnumerable<PersonModel>> SavePersonAsync(IEnumerable<PersonModel> personsModel)
{
var personsEntity = await _personModelToPersonEntityMapper.MapPersonModelToPersonEntityAsync(personsModel);
var savedPersons = await _personDbService.SavePersonAsync(personsEntity.First()); // Currently only alow one person at a time, later it will allow to save a collection of persons
return await _personEntityToPersonModelMapper.MapPersonEntityToPersonModelyAsync(new List<PersonEntity>
{
savedPersons
});
}
}
public class PersonEntityToPersonModelMapper : IPersonEntityToPersonModelMapper
{
public async Task<IEnumerable<PersonModel>> MapPersonEntityToPersonModelyAsync(
IEnumerable<PersonEntity> personsEntity)
{
if (personsEntity.NullOrEmpty())
return await Task.FromResult(Enumerable.Empty<PersonModel>());
return await Task.FromResult(personsEntity.Select(personEntity => new PersonModel
{
FirstName = personEntity.FirstName,
LastName = personEntity.LastName
}));
}
}
public class PersonModelToPersonEntityMapper : IPersonModelToPersonEntityMapper
{
public async Task<IEnumerable<PersonEntity>> MapPersonModelToPersonEntityAsync(IEnumerable<PersonModel> personsModel)
{
if (personsModel.NullOrEmpty())
return await Task.FromResult(Enumerable.Empty<PersonEntity>());
return await Task.FromResult(personsModel.Select(personModel => new PersonEntity
{
FirstName = personModel.FirstName,
LastName = personModel.LastName
}));
}
}
根据async await的定义,当您编写Wait时,流将按顺序启动,因为您需要在下一个语句中使用输出,因此在您的情况下,async await没有太多的用途 讲述它是如何工作的 假设您必须调用可以异步工作的方法,您的代码如下: Var a=GetMethodA Var b=GetMethodB 等待时机 等待b
在这种情况下,您的方法将异步工作为什么方法MapPersonModelToPersonEntityAsync和MapPersonEntityToPersonModelyAsync需要异步它们所做的是执行Linq查询?这些方法被程序的其他部分使用,并且需要异步功能。@开始时您的意思是接口具有不同的异步功能在其他地方实现,您必须遵循异步签名?@cassandrad没错,这两个接口的现有实现是异步IPersonModelToPersonTityMapper和IPersonTityToPersonModelApper。我不想更改它,因为它已经被大型应用程序的其他部分使用。让我知道是否有任何实施陷阱?如果是这样的话,如何避免或改进它。@TheBeginer,我没有看到任何,除了缺少ConfigureWaitFalse,因为我不知道如何使用这个类。