ValueTask Struct-datatyp

Definition

Ger ett väntande resultat av en asynkron åtgärd.

public value class ValueTask : IEquatable<System::Threading::Tasks::ValueTask>
public readonly struct ValueTask : IEquatable<System.Threading.Tasks.ValueTask>
type ValueTask = struct
Public Structure ValueTask
Implements IEquatable(Of ValueTask)
Arv
ValueTask
Implementeringar

Kommentarer

En ValueTask instans kan antingen inväntas eller konverteras till en Task med .AsTask En ValueTask instans kan bara vänta en gång och användarna kanske inte anropar GetAwaiter() förrän instansen har slutförts. Om dessa begränsningar är oacceptabla konverterar du ValueTask till en Task genom att anropa AsTask.

Följande åtgärder bör aldrig utföras på en ValueTask instans:

  • Väntar på instansen flera gånger.
  • Anropar AsTask flera gånger.
  • Använd mer än en av dessa tekniker för att använda instansen.

Om du gör något av ovanstående är resultatet odefinierat.

A ValueTask är en struktur som kan omsluta antingen en Task eller en IValueTaskSource instans. Om du returnerar en ValueTask instans som omsluter en IValueTaskSource instans från en asynkron metod kan program med högt dataflöde undvika allokeringar med hjälp av en pool med återanvändbara IValueTaskSource objekt. Mer information finns i Förstå Whys, Whats och when's of ValueTask.

Att använda en ValueTask i stället för en Task medför vissa omkostnader. Eftersom ValueTask är en struktur med flera fält resulterar det i att du kopierar mer data jämfört med att returnera en enda Task referens om du returnerar den från metoden. Därför bör standardvalet för alla asynkrona metoder som inte returnerar ett resultat vara att returnera en Task. Endast om prestandaanalysen visar att det är värt bör en ValueTask användas i stället för en Task. Egenskapen Task.CompletedTask ska användas för att lämna tillbaka en lyckad singleton i det fall där en metod som returnerar en Task slutförd slutförs synkront och korrekt.

Note

Användningen av typen ValueTask stöds från och med C# 7.0 och stöds inte av någon version av Visual Basic.

Note

En instans som skapats med den parameterlösa konstruktorn eller av syntaxen default(ValueTask) (en nollinitierad struktur) representerar en synkront slutförd åtgärd.

Konstruktorer

Name Description
ValueTask(IValueTaskSource, Int16)

Initierar en ny instans av ValueTask klassen med det angivna IValueTaskSource objektet som representerar åtgärden.

ValueTask(Task)

Initierar en ny instans av klassen med hjälp av ValueTask den angivna uppgift som representerar åtgärden.

Egenskaper

Name Description
IsCanceled

Hämtar ett värde som anger om det här objektet representerar en avbruten åtgärd.

IsCompleted

Hämtar ett värde som anger om det här objektet representerar en slutförd åtgärd.

IsCompletedSuccessfully

Hämtar ett värde som anger om det här objektet representerar en åtgärd som har slutförts.

IsFaulted

Hämtar ett värde som anger om det här objektet representerar en misslyckad åtgärd.

Metoder

Name Description
AsTask()

Hämtar ett Task objekt som representerar detta ValueTask.

ConfigureAwait(Boolean)

Konfigurerar en awaiter för det här värdet.

Equals(Object)

Avgör om det angivna objektet är lika med den aktuella ValueTask instansen.

Equals(ValueTask)

Avgör om det angivna ValueTask objektet är lika med det aktuella ValueTask objektet.

GetAwaiter()

Skapar en awaiter för det här värdet.

GetHashCode()

Returnerar hash-koden för den här instansen.

Preserve()

Hämtar en ValueTask som kan användas när som helst i framtiden.

Operatorer

Name Description
Equality(ValueTask, ValueTask)

Jämför två ValueTask värden för likhet.

Inequality(ValueTask, ValueTask)

Avgör om två ValueTask värden är olika.

Gäller för