Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Async / Await operator

[es] :: .NET :: ASP.NET :: Async / Await operator

[ Pregleda: 1408 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

magrinjo

Član broj: 337536
Poruke: 143
*.dynamic.sbb.rs.



+1 Profil

icon Async / Await operator19.01.2020. u 17:05 - pre 51 meseci
Pozdrav svima,

Zeleo bih da ubrzam svoju demo aplikaciju uvodjenjem async/await metoda.

Pratio sam dokumentaciju ali nisam bas najsigurniji kako asinhrone metode funkcionisu na ovom primeru.

Code:

public async Task<bool> ProveriDaLiPostoji(){

var covek = await _podatak.Covek.DaLiPostoji();
var zivotinja = await _podatak.Zivotinja.DaLiPostoji();
var duh =  _podatak.Duh.DaLiPostoji();

}

--

U ovom slucaju, iz tri promenjive dobijamo podatak iz Query modela koji se zove "_podatak". U tom modelu, metoda je isto await sem za "var duh".

Ono sto me buni jeste sta dobijam primenom async/await u ovom slucaju, gde mi samo promenjiva "duh" nije asinhrona?
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: Async / Await operator19.01.2020. u 20:25 - pre 51 meseci
U suštini, prostom upotrebom async/await ne dobijaš ubrzanje (ponekad dobijaš i dozu usporenja),
već oslobađaš thread koji može da radi nešto drugo (dakle nije blokiran) dok se čeka na završetak asinhronih operacija.

Ovo je poželjno kod, na primer, ASP.Net aplikacija pošto bolje skalira nego sinhroni kod -
smanjuje broj potrebnih thread-ova - jedan thread može da opslužuje više od jednog request-a.
https://www.red-gate.com/simpl...eature-in-promise-and-practice

Tvoj slučaj gde proveravaš postojanje nečega možeš zaista da ubrzaš tako što ćeš da pokreneš obe
Covek.DaLiPostoji() i Zivotinja.DaLiPostoji() i sačekaš na završetak koristeći Task.WaitAll(...)
Otprilike ovako:
Code:

var covekTask = _podatak.Covek.DaLiPostoji();
var zivotinjaTask = _podatak.Zivotinja.DaLiPostoji();

await Task.WaitAll(covekTask, zivotinjaTask);

var nestoPostoji = covekTask.Result || zivotinjaTask.Result || ...;

Dakle, ne ideš sekvencijalno jednu po jednu operaciju sa await (pošto su nezavisne jedna od druge),
već ih pokreneš sve (nazovi "paralelno") i onda čekaš (await) dok se sve ne završe.

[Ovu poruku je menjao dusans dana 19.01.2020. u 21:41 GMT+1]
 
Odgovor na temu

magrinjo

Član broj: 337536
Poruke: 143
*.dynamic.sbb.rs.



+1 Profil

icon Re: Async / Await operator23.01.2020. u 17:35 - pre 51 meseci
Hvala na odgovoru :)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Async / Await operator31.01.2020. u 06:41 - pre 51 meseci
Ja samo da dodam da je async/await zapravo nastao i ima vecu korist zbog desktop aplikacija (winforms i wpf). Njegova prvobitna namena je bila da oslobodi glavni GUI thread od cekanja na hendlere.
ASP.NET je samo preuzeo koncept, i uglavnim ignorise ExecutionContext i kad se ne napise dobro zapravo pravi vise stete nego da ste pustili da se request obavi u jednom threadu, pa je upotreba ConfigureAwait veoma pozeljna.

U principu gornji primer bi trebalo da izgleda ovako ako je handler za win/wpf. Asp.net bi u principu sve trebalo da fura na false:

Code (csharp):

var covekTask = _podatak.Covek.DaLiPostoji().ConfigureAwait(false); // ne interesuje nas da se task nastavi u istom kontekstu
var zivotinjaTask = _podatak.Zivotinja.DaLiPostoji().ConfigureAwait(false);

await Task.WaitAll(covekTask, zivotinjaTask).ConfigureAwait(true);   // nas krajnji rezultat zelimo u glavnom kontestu, asp.net moze i false.

var nestoPostoji = covekTask.Result || zivotinjaTask.Result || ...;
 

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

[es] :: .NET :: ASP.NET :: Async / Await operator

[ Pregleda: 1408 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.