Asynchronizuj całą drogę?

Próbując zrozumieć nowy wzorzec async / await, mam jedno pytanie, na które nie mogę znaleźć odpowiedzi, a mianowicie, czy powinienem udekorować moje metody asynchronicznie, jeśli zamierzam wywołać te metody z innych funkcji asynchronicznych lub po prostu wrócićTaskw razie potrzeby?

Innymi słowy, która z tych klas A, B lub C jest najlepsza i dlaczego?

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(...);
      }
}

Nadmierne metody wydają się zbędne, więc naturalnie skłaniam się ku niemuC, ale jednocześnie jest trochę niezręcznie pracowaćTask<T> chyba że używaszawait słowo kluczowe.

questionAnswers(2)

yourAnswerToTheQuestion