Wpis z mikrobloga

Mam dwie metody, Metoda1() i Metoda1Async(), które są takie same (zwracają stringa), poza tym że jedna jest synchroniczna a druga nie jest. Przyjął się jakiś wzór jak zrobić lub nie robić takich dwóch wariantów tej samej metody? Czy Metoda1Async() może wyglądać tak?

await Task.Run(() => Metoda1());
Uniknąłbym powtarzania tego samego kodu.

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

await Task.Run(() => Metoda1());


@Goglez: Tak i nie. Od biedy może ale jak można to lepiej napisać nową, asynchroniczną wersje tej samej metody. Warto pamiętać że wywołanie Task.Run odkłada wątek w thread poolu natomiast asynchroniczność != wielowątkowość :)
  • Odpowiedz
@Szab: Dzięki.

Warto pamiętać że wywołanie Task.Run odkłada wątek w thread poolu natomiast asynchroniczność != wielowątkowość :)

To znaczy w tym przypadku jakie problemy to rozwiązanie może generować?
  • Odpowiedz
@Goglez: Takie problemy, że wtedy ten kod jest dalej wykonywany synchronicznie, tyle że na innym wątku. Jeśli na przykład czytasz plik to ten wątek będzie stał zablokowany. Co innego gdy przepiszesz tą metodę, żeby korzystała z Async'owych wersji czytania z pliku. Wtedy tylko wysyłasz do OS informację o tym, że chcesz przeczytać plik, wątek się zwalnia i dopiero jak czytanie się zakończy to OS informuje i następuje wznowienie wykonywania kodu.
  • Odpowiedz