[ jovanpavlovic777 @ 12.05.2017. 09:28 ] @
Vec duze vremena uspesno koristim TPL na projektima. Veoma mi je bliska i razumljiva metodologija i tehnologija TPL-a, mozda i zahvaljujuci knjizi Gastón Hillar-a.

Sa druge strane vidim da async/await isto dobija veliku popularnost, samo je meni manje blisko tako pisanje i implementacija (razmisljanje takodje).

Koliko sam shvatio sve sto se nalazi nakon await se zapravo izvrasava u background threadu a callback se izvrsava na sledecoj liniji nakon awaita?

Da li postoji jos benefita u koriscenju async/await u odnosu samo na TPL?
[ dusans @ 12.05.2017. 09:59 ] @
Nisam koristio TPL tako da ne mogu da pravim nekakve konkretne paralele sa async/await,
mada, koliko vidim, TPL i async/await se ne bave i ne rešavaju iste stvari.

Citat:

Koliko sam shvatio sve sto se nalazi nakon await se zapravo izvrasava u background threadu a callback se izvrsava na sledecoj liniji nakon awaita?

Nije nužno u drugom thread-u - može a i ne mora, zavisi od implementacije task-a.

Asinhroni task je obećanje da će nešto da se završi u budućnosti.
Kada se to desi, nastavlja se tamo gde se stalo, tj. posle await-a.

Umesto da se piše kod sa callback-ovima koji je jako nezgodono pratiti,
piše se klasičan top-down kod čiji se delovi efektivno izvršavaju asinhrono.
[ jovanpavlovic777 @ 12.05.2017. 10:15 ] @
Ok hvala na odgovoru.
Slazem se sa tobom i da je lakse pratiti kod jer se nastavlja izvrsavanje nakon awaita.
Meni je doduse mnogo lakse sa Task i zatim sa Task.ContinueWith() da tacno iskontrolisem sta se izvrsava gde i u kom trenutku.
Onda ulancam Taskove i preskacem iz UI threada u background thread, i obrnuto.
Sada koliko vidim to se zapravo skriva i apstrahuje sa async/await zbog preglednosti (mada je meni i Task sam pregledan).
Kako da uradim Parallel.For sa async/await?
[ mmix @ 15.05.2017. 11:51 ] @
Treba samo napomenuti da await poziv async metoda NIJE asinhroni poziv. To je sinhroni poziv koji odlazi u async samo u specificnim situacijama (IO ili poziv druge vrste sistemskog blocking metoda). Jedini drugi nacin da svoj async metod "nateras" da ode u drugi thread je da pozoves Task.Yield();

U osnovi async/await je kompajlerska mahinacija sa Task.ContinueWith() (kad kazem odlazi u async samo u specificnim situacijama mislim ubaci ContinueWith() ) s tim sto postoji implicitno pracenje konteksta. Druga prednost je sto situacije u kojima imas puno kontinuacija, kad su napisane u a/a maniru mnogo lepse izgledaju.

Parallel.For sa druge strane je task dispatcher, njegova primena je najjaca u situacijama kad imas neko masovno procesiranje nad podacima koje mozes da particionises u nezavisne podsetove. Van toga je cisto silovanje.