To by me zajimalo jak chcete s thready napsat aynchronni kod.
No, ehm, úplně normálně? Asynchronní kód s vlákny dělá třeba to vaše
@Async ze Springu, ostatně i primitivní
new Thread().start() je asynchronní kód s vlákny.
Protoze k tomu abyste z toho opravdu dokazal tezit, tak potrebujete mit drtivou vetsinu metod await async
Asi bychom si nejprve měli ujasnit, co je
await/async – je to syntaktický cukr, aby kód, který se provádí asynchronně, byl zapsaný jako klasický synchronní kód. Normálně u asynchronního volání určíte, co se má dít po do dokončení příslušného kódu.
Await/async znamená, že to asynchronní volání nějak označíte (pokud má podporu přímo jazyk, obvykle klíčovým slovem
await), a kód, který se má provést po dokončení asynchronního volání pak píšete pod to asynchronní volání. Ohledně možností toho, co můžete napsat, se nic nemění.
Jenom tak se vam bude spoustet kaskada operaci zatimco normalne pisete relativne standardni kod a nesnazite se komplikovat si design paralelnim zpracovanim.
Nemůžu si pomoci, ale podle mne je
await špatný koncept. Ten nápad „asynchronní kód je pro programátora složitější, uděláme to, aby to vypadalo, že o žádný asynchronní kód nejde“ staví na tom, že ta komplikovanost vzniká jenom strukturováním kódu. Jenže podle mne by si programátor měl být vědom toho, že pracuje s asynchronním kódem, protože jednak to stejně může mít vedlejší efekty, jednak kód psaný neasynchronně nebude při provádění tak efektivní, jako když programátor záměrně píše asynchronní kód.
Springovske Async neni neco jineho, kdyz se to spravne pouzije (kdyz se budou vyrabet Fibery z Quasaru), tak je to prave TO Await Async, podobne jako je v C#.
Springovské
@Async předá provedení kódu standardnímu javovskému
Executoru. V kódu, který volá
@Async metodu, dostanete jako návratovou hodnotu
Future a kód normálně pokračuje v provádění, nečeká na dokončení té asynchronní metody. Pokud chcete udělat
await, musíte na tom
Future vzápětí zavolat
get(). To už ale nijak nesouvisí se Springovským
@Async, to je normální chování
Future.