Асинк полностью вниз?

Пытаясь понять новый шаблон async / await, у меня есть один вопрос, на который я не могу найти ответ, а именно, должен ли я декорировать свои методы с помощью async, если я собираюсь вызвать эти методы из других асинхронных функций или просто вернутьTaskгде уместно?

Другими словами, какой из этих классов A, B или C является лучшим и почему?

class A<T>
{
      public async Task<T> foo1() //Should be consumed
      {
          return await foo2();
      }

      public async Task<T> foo2() //Could be consumed
      {
          return await foo3();
      }

      private async Task<T> foo3() //Private
      {
          return await Task.Run(...);
      }
}

class B<T>
{
      public async Task<T> foo1() //Should be consumed
      {
          return await foo2();
      }

      public async Task<T> foo2() //Could be consumed
      {
          return await foo3();
      }

      private Task<T> foo3() //Private
      {
          return Task.Run(...);
      }
}

class C<T>
{
      public async Task<T> foo1() //Should be consumed
      {
          return await foo2();
      }

      public Task<T> foo2() //Could be consumed
      {
          return foo3();
      }

      private Task<T> foo3() //Private
      {
          return Task.Run(...);
      }
}

Кажется излишним переоценивать методы, поэтому я, естественно, склоняюсь кCно в то же время работать с ним несколько неловкоTask<T> если вы не используетеawait ключевое слово.

Ответы на вопрос(2)

Ваш ответ на вопрос