Kezdőoldal » Számítástechnika » Programozás » Mi a különbség e kettő közt? C#

Mi a különbség e kettő közt? C#

Figyelt kérdés

Egyik:


static DamageResult CalculateDamageDone()

{

return new DamageResult()

{

// Code omitted:

//

// Does an expensive calculation and returns

// the result of that calculation.

};

}


s_calculateButton.Clicked += async (o, e) =>

{

// This line will yield control to the UI while CalculateDamageDone()

// performs its work. The UI thread is free to perform other work.

var damageResult = await Task.Run(() => CalculateDamageDone());

DisplayDamage(damageResult);

};


Másik:


Ugyanaz a kód csak ezt cserèljétek:

var damageResult = await Task.Run(() => CalculateDamageDone());


Erre:

var damageResult = await CalculateDamageDone();


júl. 7. 17:01
 1/6 A kérdező kommentje:

Lett egy válasz máshonnan.


"A Task.Run mindig egy másik szálra helyezi a feladatot.


Az await alapértelmezés szerint folytatja a végrehajtást az aktuális szálon, ha az befejeződött"


Miért amíg nincs befejeződve addig az is külön szálon fut? Mert ha igen ,akkor mindkettő példa külön szálon fut ,ez esetben továbbra sem látom a különbséget e kettő példa közt.

júl. 7. 18:15
 2/6 A kérdező kommentje:

Azt hiszem már értem.


Ha csak simán az async/await ot használom akkor nem kerül plusz szálra a feldolgozás viszont ennek ellenére mégis úgy tűnhet hogy egyszerre 2 vagy több feladatot végez az adott szál egyidőben pedig valójában nem mert vagy az egyik feladatot vagy a másikat csinálja egyazon szálon de sosem egyidőben mind a kettőt.

Szóval ebben az esetben egy szálra jut több feladat és amíg az egyiknél csak várakoznia kell addig visszatérhet csinálni az előzőt.

Pl ha letöltök valamit vagy fájlba írok, akkor a feladatok kiosztása után már csak várni kell a feladatok befejezésére amit már egy külső oprendszerbeli folyamat kezel , amíg ez nincs kész addig az adott szál visszatér egy korábbi feladatához.


Viszont ha olyan dolog kell hogy működjön amire nem lehet várni akkor jöhet a külön szál.

júl. 7. 19:18
 3/6 anonim válasza:
40%
Az például elég nagy különbség, hogy a második le sem fordul.
júl. 7. 22:38
Hasznos számodra ez a válasz?
 4/6 A kérdező kommentje:
Tudom.
júl. 7. 23:39
 5/6 anonim válasza:

Azért van különbség.

A Task.Run az minden esetben új szálon fogja indítani a hívást és ott fog futni, míg az await CalculateDamageDone() aszinkron mód fut le.

júl. 10. 14:59
Hasznos számodra ez a válasz?
 6/6 anonim válasza:
Hogy futna aszinkron módon, amikor le sem fordul...? Sehogy nem fog futni.
júl. 15. 15:57
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!