Mi a különbség e kettő közt? C#
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();
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.
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.
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!