Async i await - jak używać

0

Próbuję ogarnąć programowanie asynchroniczne, mam taki kod:

 
public async Task<Data> GetData()
{
var data = await DownloadData();
foreach (var d in data) d = Do(d);
return data;
}

public async Task<Data> Metoda1()
{
/* tutaj jakiś kod */
return await GetData();
}

public Task<Data> Metoda2()
{
/* tutaj jakiś kod */
return GetData();

}

Jeśli piszę własną aplikację i mam w niej podział na warstwy to powinienem raczej pisać metody typu Meroda1(), tzn takie która każda czeka na metody asynchroniczne, czy raczej przekazywać Taska w górę tak jak w Metoda2?

Pytanie 2: Kiedy dodawać do nazwy metody Async, jak posiada modyfikator async, czy jak zwraca Task, Task<T>, jak używa innych metod Async?

1
  1. w zaleznosci od tego co chcesz uzyskac, ale uzywanie zapisu w stylu Metoda2 o ile nie jest to jakas fabryka nie za bardzo ma dla mnie sens.
  2. moim zdaniem nie ma potrzeby dodawania zadnych magicznych suffix'ow do nazwy metody, przeciez IDE pokazuje ci wszystkie informacje jakie sa potrzebne

do zrozumienia async/await goraco polecam rozdzial z ksiazki c# in depth w najnowszej edycji

1

Pytanie 2: Kiedy dodawać do nazwy metody Async, jak posiada modyfikator async, czy jak zwraca Task, Task<t>, jak używa innych metod Async?

Wytyczne MS się tutaj zmieniły w czasie.
Przed wynalezieniem async i await niektóre metody miały w nazwie Async żeby zasygnalizować że działają jakoś-tam asynchronicznie (ale nie używały async/await, bo tego jeszcze nie było).

Wraz z dodaniem słów kluczowych async i await postanowiono, że Async w nazwie będzie oznaczał że metoda używa async/await. W przypadku gdyby metoda z Async w nazwie już istniała (na podstawie poprzedniej konwencji), nowa metoda (używająca async) powinna mieć w nazwie TaskAsync dla odróżnienia.

To tylko konwencja, do której możesz się stosować albo nie. Jeśli chcesz się stosować, to Async stosuj do metod, które są async :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1