Wpis z mikrobloga

Czy jeśli mam metodę string Metoda() i zmienię ją na async Task MetodaAsync(), ale bez dodawania awaita (dokładnie to samo ciało), to czy var a = await MetodaAsync() zadziała asynchronicznie?

#programowanie #csharp #naukaprogramowania
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Goglez: To nic nie zmieni, pomijając to, że z identycznym ciałem metody nie zwracasz Taska i kompilator będzie darł ryja. Do tego IDE powie Ci, że async w definicji metody nie ma sensu

@atestowanie2: gdyby była to rzeczywista metoda asynchroniczna, to wywołanie nie zablokuje innych kontekstów na tym samym wątku (szczególnie widać to na wątku UI w desktopach albo mobilkach), będzie jak najbardziej asynchroniczne
  • Odpowiedz
pomijając to, że z identycznym ciałem metody nie zwracasz Taska i kompilator będzie darł ryja. Do tego IDE powie Ci, że async w definicji metody nie ma sensu


@Czesiowcy: Właśnie informuje tylko o tym, że w metodzie nie ma awaita, ale jest to ostrzeżenie, nie wywala błędu, stąd pytanie.
  • Odpowiedz
  • 1
@Czesiowcy wydawało mi się że await z definicji czeka na rezultat i rejestruje dalszą część metody w Tasku (jego użycie z resztą wymusza oznaczenie metody jako async a w konsekwencji zwrócenie przez nią Taska). Nawet dokumentacja zaznacza:

An await expression does not block the thread on which it is executing. Instead, it causes the compiler to sign up the rest of the async method as a continuation on the awaited task.
  • Odpowiedz
@Szab: Czeka na rezultat, jeśli gdzieś w środku wywoływanej metody jest jakiś oczekiwany Task (czyli tutaj trzebaby await Task.Run( () => ciało metody). Inaczej taka metoda wykonywana jest synchronicznie.
  • Odpowiedz