Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Az await operátor felfüggeszti a beágyazási aszinkron metódus kiértékelését, amíg az operandus által képviselt aszinkron művelet be nem fejeződik. Ha az aszinkron művelet befejeződik, az await operátor visszaadja a művelet eredményét, ha van ilyen. Ha az operátor egy await már befejezett műveletet jelképező operandusra van alkalmazva, a művelet eredményét azonnal, a beágyazási módszer felfüggesztése nélkül adja vissza. Az await operátor nem blokkolja az aszinkron metódust kiértékelő szálat. Amikor az await operátor felfüggeszti a beágyazási aszinkron metódust, a vezérlő visszatér a metódus hívójának.
A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.
A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.
Jótanács
Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.
A következő példában a HttpClient.GetByteArrayAsync metódus a Task<byte[]> példányt adja vissza, amely egy aszinkron műveletet jelöl, amely a befejezett bájttömböt hozza létre. A művelet befejezéséig az await operátor felfüggeszti a metódust DownloadDocsMainPageAsync . Amikor DownloadDocsMainPageAsync a rendszer felfüggeszti, a rendszer visszaadja a vezérlést a Main metódusnak, amely a hívója DownloadDocsMainPageAsync. A Main metódus addig fut, amíg a metódus által DownloadDocsMainPageAsync végrehajtott aszinkron művelet eredményére nem lesz szüksége. Amikor GetByteArrayAsync lekéri az összes bájtot, a metódus többi része DownloadDocsMainPageAsync kiértékelésre kerül. Ezt követően a metódus többi része Main kiértékelésre kerül.
public class AwaitOperator
{
public static async Task Main()
{
Task<int> downloading = DownloadDocsMainPageAsync();
Console.WriteLine($"{nameof(Main)}: Launched downloading.");
int bytesLoaded = await downloading;
Console.WriteLine($"{nameof(Main)}: Downloaded {bytesLoaded} bytes.");
}
private static async Task<int> DownloadDocsMainPageAsync()
{
Console.WriteLine($"{nameof(DownloadDocsMainPageAsync)}: About to start downloading.");
var client = new HttpClient();
byte[] content = await client.GetByteArrayAsync("https://learn.microsoft.com/en-us/");
Console.WriteLine($"{nameof(DownloadDocsMainPageAsync)}: Finished downloading.");
return content.Length;
}
}
// Output similar to:
// DownloadDocsMainPageAsync: About to start downloading.
// Main: Launched downloading.
// DownloadDocsMainPageAsync: Finished downloading.
// Main: Downloaded 27700 bytes.
A kifejezés operandusának await értesítést kell adnia egy feladat befejezésekor. A feladat befejezésekor általában egy meghatalmazottat hív meg a függvény, akár sikeresen, akár sikertelenül. A await C# nyelvi specifikációjának szakasza részletesen ismerteti az értesítések implementálásának módját.
Az előző példa az aszinkron Main metódust használja. További információkért tekintse meg a Főmetódus szakaszban található várakozási operátort.
Feljegyzés
Az aszinkron programozás bemutatása: Aszinkron programozás aszinkronnal és várakozással. Aszinkron programozás a feladatalapú aszinkron asyncawait és azt követi.
Az operátort csak az aszinkron await kulcsszó által módosított metódusban, lambdakifejezésben vagy névtelen metódusban használhatja. Az aszinkron metóduson belül nem használhatja az await operátort a szinkron helyi függvény törzsében, a zárolási utasítás blokkjában és nem biztonságos környezetben.
Az operátor operandusa await általában a következő .NET-típusok egyike: Task, Task<TResult>, ValueTaskvagy ValueTask<TResult>. A várt kifejezés azonban az operátor operandusa await lehet. További információ: A C# nyelv specifikációjának Várandó kifejezések szakasza.
A kifejezés await t típusa az, TResult ha a kifejezés tTask<TResult> típusa vagy ValueTask<TResult>. Ha a típus t vagy TaskValueTaskaz , akkor a típus await t a következő void. Mindkét esetben, ha t kivételt ad ki, await t a kivételt újból meg kell ismételni.
Aszinkron streamek és eldobható
Az utasítással await foreach aszinkron adatstreamet használhat. További információkért tekintse meg az foreach Iteration utasításokkal foglalkozó cikk utasítás szakaszát.
Az await using utasítással egy aszinkron módon eldobható objektummal, vagyis egy interfészt implementáló IAsyncDisposable típusú objektummal dolgozhat. További információ: Az DisposeAsync metódus implementálása című cikk Aszinkron aszinkron használata című szakasza.
várakozási operátor a Main metódusban
A Main metódus az alkalmazás belépési pontjaként szolgál. Vissza tud térni Task , vagy Task<int>, ami aszinkronvá teszi. A metódus aszinkronizálásával Main használhatja az operátort a await törzsében. A korábbi C#-verziókban annak érdekében, hogy a Main metódus megvárja az aszinkron művelet befejezését, kérje le annak a példánynak az Task<TResult>.ResultTask<TResult> értékét, amelyet a megfelelő aszinkron metódus visszaad. Olyan aszinkron műveletek esetén, amelyek nem hoznak létre értéket, hívja meg a metódust Task.Wait . A nyelvi verzió kiválasztásáról további információt a C# nyelvi verziószámozásában talál.
C# nyelvspecifikáció
További információ: A C# nyelv specifikációjának Kifejezések várva című szakasza.