Wpis z mikrobloga

@ziolo86 wątek główny w momencie wywołania await czeka na zwrócenie wyniku/zakończenie działania drugiego wątku. Wątek główny nie przejdzie dalej jeśli nie zakończy działania wątek 2. Często w przykładach jest wywołanie metody razem z await. Jednak jeżeli masz metodę działająca długo, np. pobierającą coś z sieci lub z bazy to warto await dać na samym końcu tak aby dać głównemu wątkowi możliwość wykonania innych zadań. await dajesz wtedy gdy musisz mieć już te
@ziolo86: @Sorn: To zależy, czy metoda asynchroniczna odwołuje się do pamięci niezarządzanej. Jeżeli tak, wtedy nie jest tworzony nowy wątek, jeżeli się nie odwołuje (tylko na przykład robi jakieś obliczenia na procesorze), to wtedy jest tworzony nowy wątek.

z msdn:

By default, tasks execute on the current thread and delegate work to the Operating System, as appropriate. Optionally, tasks can be explicitly requested to run on a separate thread
@ziolo86: to zależy od rodzaju operacji asynchronicznej. Np. użycie metody Task.Run powoduje, że kod w niej wywoływany wykona się na wątku w tle. Z kolei await np. przy odczycie z dysku lub innego IO nie tworzy żadnego wątku a jedynie "czeka" na odpowiedź urządzenia.
@RudyNinja: @Priya: @Sorn: nie tworzy nowego wątku sam z siebie (chodzi mi o GUI)
przede wszystkim zmieniana jest obsługa kolejki wiadomości - metoda asynchroniczna "opuszcza" tę kolejkę dając się wykonać pozostałym wiadomością w kolejce

@FaenTaDeg: Tak się ma, że asynchroniczność nie ma nic wspólnego z równoległością.
Dopóki nie skonfigurujesz metody na którą oczekujesz np. ConfigureAwait(false) lub nie odpalisz jej w Task.Run to operacja, którą awaitujesz wykona się w tym samym wątku.
@FaenTaDeg: no ja właśnie napisałem to tak jak rozumiesz to Ty i jak wyjaśnia to kolega @w_o_w. Dobrze powiedziane żeby pamiętać, że asynchroniczne i równoległe to dwie różne rzeczy i mogą się one łączyć, ale nie muszą.