Если вы используете async/await на более низком уровне в своей архитектуре, необходимо ли "всплывать" вызовы async/await полностью, это неэффективно, поскольку вы в основном создаете новый поток для каждого уровня (асинхронно вызывающий асинхронная функция для каждого уровня, или это не имеет особого значения и зависит только от ваших предпочтений?
Я использую EF 6.0-alpha3, чтобы у меня были методы async в EF.
Мой репозиторий таков:
public class EntityRepository<E> : IRepository<E> where E : class
{
public async virtual Task Save()
{
await context.SaveChangesAsync();
}
}
Теперь мой бизнес-уровень таков:
public abstract class ApplicationBCBase<E> : IEntityBC<E>
{
public async virtual Task Save()
{
await repository.Save();
}
}
И тогда, конечно, мой метод в моем интерфейсе будет иметь тот же шаблон при вызове.
Это:
- необходимо
- отрицательный результат
- только вопрос предпочтения
Даже если это не используется в отдельных слоях/проектах, то одни и те же вопросы касаются, если я вызываю вложенные методы в одном классе:
private async Task<string> Dosomething1()
{
//other stuff
...
return await Dosomething2();
}
private async Task<string> Dosomething2()
{
//other stuff
...
return await Dosomething3();
}
private async Task<string> Dosomething3()
{
//other stuff
...
return await Task.Run(() => "");
}