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ćTask
w 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.