Async, await C#

0

Witam, nie jestem programistą.
Chciałem się zapytać, która to będzie odpowiedż. Z góry dziękuje !
private async void jakasFunkcja()

int zmienna=await Metoda2();
// wywolanie Metody1
}

odp:

  • Metoda1 czeka na wynik poprzedniej metody i dopiero wykona sie nastepna - chyba poprawna
  • Metoda1 wykona sie natychmiast po zakonczeniu Metody2
  • await i async nie istnieja w C#
0

Masz rację.

0
  • Metoda1 czeka na wynik poprzedniej metody i dopiero wykona sie nastepna - chyba poprawna
  • Metoda1 wykona sie natychmiast po zakonczeniu Metody2
  • await i async nie istnieja w C#

1 i 2 nie są takie same ? Tak czy siak jak używasz await to asynchroniczna metoda się blokuję do momentu zakończenia awaitowanej metody. Ale może chodzi o to że continnueWith pasuje do pierwszej odpowiedz ?

0

Też się zastanawiałem nad tymi sformułowaniami z dwóch pierwszych punktów.

Zależy jak w drugim punkcie rozumieć natychmiast, bo przed wywołaniem Metody1 najpierw wartość zwrócona z Metody2 zostanie przypisana do zmiennej, a dopiero później Metoda1 będzie wywołana.

5
private async void jakasFunkcja()
{ 
         int zmienna=await Metoda2();
       // wywolanie Metody1
}
  1. w momencie natrafienia na await Metoda2() metoda jakasFunkcja wyjdzie i zwróci obiekt typu Task.
  2. dalsza część jakiejśFunkcji, czyli wywołanie Metoda2 i Metody1 wykona się w ramach tego tasku.
    2.1. Metoda2 zwraca obiekt Task<int>
    2.2. trwa oczekiwanie (await) na wykonanie Task<int> zwróconego przez Metodę2.
    2.3. await zwraca inta który jest przypisywany do zmiennej zmienna
    2.4. następuje wywołanie i wykonanie Metody1
  3. po zakończeniu wykonywania ciała funkcji jakasFunkcja zwrócony w punkcie 1 obiekt Task zostanie oznaczony jako zakończony.

Co jest istotne, to await tak naprawdę powoduje wyjście z bieżącej funkcji asynchronicznej i zwrócenie Tasku. Jest więc jakby returnem.
Utworzony Task zawiera wywołanie tego co było awaitowane i całą dalszą „treść” funkcji. Wykonany będzie asynchronicznie, a co to konkretnie oznacza to zależy od aktualnego kontekstu synchronizacji.

0

Dziekuję za odpowiedzi.
Dopiero dzisiaj do tematu zajrzałem czyli wychodzi, że metoda nie wykona sie "natychmiast" tylko wykona się po zakończeniu zadania zwróconego przez metode2 ? Czy dobrze zrozumiałem ?

0

Przepraszam, żle zapamiętałem poprzednią treść. Pytanie brzmiało tak:

async void Metoda(){
  int x = await Metoda2();
  Console.WriteLine("Komunikat");
}

A) Napis "Komunikat" wyswietli sie po zakonczeniu zadania zwroconego przez metode 2
B) Napis "Komunikat" wyswietli się natychmiast po zakończeniu metody2

Wydaję mi się,że odpowiedz A)

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