ValueTask<TResult> Struktúra
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Olyan értéktípust biztosít, amely egy és egy sortörést Task<TResult>tartalmazTResult, és csak az egyiket használja.
generic <typename TResult>
public value class ValueTask : IEquatable<System::Threading::Tasks::ValueTask<TResult>>
public readonly struct ValueTask<TResult> : IEquatable<System.Threading.Tasks.ValueTask<TResult>>
public struct ValueTask<TResult> : IEquatable<System.Threading.Tasks.ValueTask<TResult>>
type ValueTask<'Result> = struct
Public Structure ValueTask(Of TResult)
Implements IEquatable(Of ValueTask(Of TResult))
Típusparaméterek
- TResult
Az eredmény.
- Öröklődés
- Megvalósítás
-
IEquatable<ValueTask<TResult>>
Megjegyzések
Előfordulhat ValueTask<TResult> , hogy egy példányt várnak vagy átalakítanak egy felhasználóvá Task<TResult>AsTask. Egy ValueTask<TResult> példány csak egyszer várható meg, és a felhasználók csak a példány befejezéséig olvashatnak Result . Ha ezek a korlátozások elfogadhatatlanok, konvertálja a ValueTask<TResult> függvényt egy Task<TResult> hívással AsTask.
A következő műveleteket soha nem szabad végrehajtani egy ValueTask<TResult> példányon:
- Többször is vár a példányra.
- Többször is hívhat AsTask .
-
.ResultHa.GetAwaiter().GetResult()a művelet még nem fejeződött be, vagy többször is használja őket. - A példányt ezen technikák közül több használatával is felhasználhatja.
Ha a fentiek bármelyikét megteszi, az eredmények nem lesznek meghatározva.
Egy metódus akkor adhat vissza egy ilyen típusú példányt, ha valószínű, hogy a művelet eredménye szinkronban lesz elérhető, és amikor várhatóan olyan gyakran lesz meghívva, hogy az egyes hívásokhoz tartozó új Task<TResult> kiosztás költsége tiltott lesz.
Vannak kompromisszumok használata ValueTask<TResult> helyett a Task<TResult>. Ha például a ValueTask<TResult> sikeres eredmény szinkronban érhető el, a kiosztás elkerülhető, de több mezőt is tartalmaz, míg Task<TResult> referenciatípusként egyetlen mező. Ez azt jelenti, hogy egy ValueTask<TResult> metódus visszaadása több adat másolását eredményezi. Azt is jelenti, hogy ha egy ValueTask<TResult> aszinkron metóduson belül egy aszinkron metódust visszaadandó metódusra vár, az adott aszinkron metódus állapotgépe nagyobb lesz, mivel egyetlen hivatkozás helyett több mezőt tartalmazó szerkezetet kell tárolnia.
Az aszinkron művelet eredményének várakozással történő felhasználásától eltérő felhasználások esetén egy konvolúciósabb programozási modellhez vezethet, ValueTask<TResult> amely több foglalást igényel. Vegyük például azt a metódust, amely egy gyorsítótárazott feladattal rendelkező feladatot adhat vissza Task<TResult> közös eredményként vagy ValueTask<TResult>. Ha az eredmény fogyasztója egy olyan metódusban szeretné használni Task<TResult> , mint WhenAll a vagy WhenAny, először ValueTask<TResult> azt kell átalakítani egy Task<TResult> használatba AsTaskvenni, ami olyan foglalást eredményez, amely elkerülhető lett volna, ha először gyorsítótárazottat Task<TResult> használnak.
Ezért az aszinkron metódusok alapértelmezett választásának egy vagy Tasktöbb értéket kell visszaadniaTask<TResult>. Csak akkor, ha a teljesítményelemzés azt bizonyítja, hogy érdemes ValueTask<TResult> a .Task<TResult> A legtöbb forgatókönyv esetében nem ajánlott a nem általános verzió ValueTask . A CompletedTask tulajdonság használatával egy sikeresen befejezett egytonnát kell visszaadni abban az esetben, ha egy, a befejezést szinkron módon és sikeresen visszaadó Task metódust ad vissza.
Note
A ValueTask<TResult> típus használata A C# 7.0-tól kezdve támogatott, és a Visual Basic egyik verziója sem támogatja.
Note
A paraméter nélküli konstruktor vagy a default(ValueTask<TResult>) szintaxis (nulla inicializált struktúra) által létrehozott példány szinkron, sikeresen befejezett műveletet jelöl a következő eredménnyel default(TResult): .
Konstruktorok
| Name | Description |
|---|---|
| ValueTask<TResult>(IValueTaskSource<TResult>, Int16) |
Inicializálja az ValueTask<TResult> osztály új példányát egy IValueTaskSource<TResult> , a műveletet jelképező objektummal. |
| ValueTask<TResult>(Task<TResult>) |
Inicializálja az osztály új példányát a ValueTask<TResult> műveletet jelképező megadott feladattal. |
| ValueTask<TResult>(TResult) |
Inicializálja az ValueTask<TResult> osztály új példányát egy sikeres művelet megadott eredményével. |
Tulajdonságok
| Name | Description |
|---|---|
| IsCanceled |
Olyan értéket kap, amely jelzi, hogy ez az objektum megszakított műveletet jelöl-e. |
| IsCompleted |
Olyan értéket kap, amely jelzi, hogy ez az objektum befejezett műveletet jelöl-e. |
| IsCompletedSuccessfully |
Olyan értéket kap, amely jelzi, hogy ez az objektum sikeresen befejezett műveletet jelöl-e. |
| IsFaulted |
Beolvas egy értéket, amely jelzi, hogy ez az objektum egy sikertelen műveletet jelöl-e. |
| Result |
Lekéri az eredményt. |
Metódusok
| Name | Description |
|---|---|
| AsTask() |
Lekéri Task<TResult> az ezt ValueTask<TResult>jelképező objektumot. |
| ConfigureAwait(Boolean) |
Egy várakozót konfigurál ehhez az értékhez. |
| CreateAsyncMethodBuilder() |
Létrehoz egy metódusszerkesztőt egy aszinkron metódushoz. |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. |
| Equals(ValueTask<TResult>) |
Meghatározza, hogy a megadott ValueTask<TResult> objektum egyenlő-e az aktuális ValueTask<TResult> objektummal. |
| GetAwaiter() |
Létrehoz egy várakozót ehhez az értékhez. |
| GetHashCode() |
A példány kivonatkódját adja vissza. |
| Preserve() |
Lekéri azokat ValueTask<TResult> a elemet, amelyeket a jövőben bármikor használhat. |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. |
Operátorok
| Name | Description |
|---|---|
| Equality(ValueTask<TResult>, ValueTask<TResult>) |
Az egyenlőség két értékét hasonlítja össze. |
| Inequality(ValueTask<TResult>, ValueTask<TResult>) |
Meghatározza, hogy két ValueTask<TResult> érték egyenlőtlen-e. |