AsyncOperationManager.CreateOperation(Object) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Returnerar en AsyncOperation för att spåra varaktigheten för en viss asynkron åtgärd.
public:
static System::ComponentModel::AsyncOperation ^ CreateOperation(System::Object ^ userSuppliedState);
public static System.ComponentModel.AsyncOperation CreateOperation(object userSuppliedState);
public static System.ComponentModel.AsyncOperation CreateOperation(object? userSuppliedState);
static member CreateOperation : obj -> System.ComponentModel.AsyncOperation
Public Shared Function CreateOperation (userSuppliedState As Object) As AsyncOperation
Parametrar
- userSuppliedState
- Object
Ett objekt som används för att associera ett klienttillstånd, till exempel ett aktivitets-ID, med en viss asynkron åtgärd.
Returer
Ett AsyncOperation som du kan använda för att spåra varaktigheten för en asynkron metodanrop.
Exempel
I följande kodexempel visas hur du använder CreateOperation metoden för att skapa en System.ComponentModel.AsyncOperation för att spåra varaktigheten för asynkrona åtgärder. Det här kodexemplet är en del av ett större exempel för AsyncOperationManager klassen.
// This method starts an asynchronous calculation.
// First, it checks the supplied task ID for uniqueness.
// If taskId is unique, it creates a new WorkerEventHandler
// and calls its BeginInvoke method to start the calculation.
public virtual void CalculatePrimeAsync(
int numberToTest,
object taskId)
{
// Create an AsyncOperation for taskId.
AsyncOperation asyncOp =
AsyncOperationManager.CreateOperation(taskId);
// Multiple threads will access the task dictionary,
// so it must be locked to serialize access.
lock (userStateToLifetime.SyncRoot)
{
if (userStateToLifetime.Contains(taskId))
{
throw new ArgumentException(
"Task ID parameter must be unique",
nameof(taskId));
}
userStateToLifetime[taskId] = asyncOp;
}
// Start the asynchronous operation.
WorkerEventHandler workerDelegate = new(CalculateWorker);
_ = workerDelegate.BeginInvoke(
numberToTest,
asyncOp,
null,
null);
}
' This method starts an asynchronous calculation.
' First, it checks the supplied task ID for uniqueness.
' If taskId is unique, it creates a new WorkerEventHandler
' and calls its BeginInvoke method to start the calculation.
Public Overridable Sub CalculatePrimeAsync( _
ByVal numberToTest As Integer, _
ByVal taskId As Object)
' Create an AsyncOperation for taskId.
Dim asyncOp As AsyncOperation = _
AsyncOperationManager.CreateOperation(taskId)
' Multiple threads will access the task dictionary,
' so it must be locked to serialize access.
SyncLock userStateToLifetime.SyncRoot
If userStateToLifetime.Contains(taskId) Then
Throw New ArgumentException( _
"Task ID parameter must be unique", _
"taskId")
End If
userStateToLifetime(taskId) = asyncOp
End SyncLock
' Start the asynchronous operation.
Dim workerDelegate As New WorkerEventHandler( _
AddressOf CalculateWorker)
workerDelegate.BeginInvoke( _
numberToTest, _
asyncOp, _
Nothing, _
Nothing)
End Sub
Kommentarer
Metoden CreateOperation returnerar en System.ComponentModel.AsyncOperation som du kan använda för att spåra varaktigheten för en viss asynkron åtgärd och för att avisera programmodellen när åtgärden är klar. Du kan också använda den för att publicera förloppsuppdateringar och inkrementella resultat utan att avsluta åtgärden. System.ComponentModel.AsyncOperation Kommer korrekt att konvertera dessa anrop till lämplig tråd eller kontext för programmodellen.
Om du implementerar en klass som stöder det händelsebaserade asynkrona mönstret bör klassen anropa CreateOperation varje gång metoden MethodNameAsync anropas. Klientprogrammet som anropar metoden kan använda parametern userSuppliedState för att unikt identifiera varje anrop, för att särskilja händelser som utlöses under körningen av den asynkrona åtgärden.
Caution
Klientkoden måste ange ett unikt värde för parametern userSuppliedState . Icke-unika aktivitets-ID:er kan göra att implementeringen rapporterar förlopp och andra händelser felaktigt. Koden bör söka efter ett icke-unikt aktivitets-ID och generera ett System.ArgumentException om ett identifieras.
Koden bör spåra varje System.ComponentModel.AsyncOperation som returneras av CreateOperation och använda objektet i motsvarande underliggande asynkrona åtgärd för att publicera uppdateringar och avsluta åtgärden. Den här spårningen kan vara så enkel som att System.ComponentModel.AsyncOperation skicka som en parameter mellan ombud. I mer avancerade design kan klassen underhålla en samling System.ComponentModel.AsyncOperation objekt, lägga till objekt när aktiviteter startas och ta bort dem när aktiviteter slutförs eller avbryts. Med den här metoden kan du söka efter unika userSuppliedState parametervärden och är den metod som du bör använda när du arbetar med klasser som stöder flera samtidiga anrop.
Mer information om hur du implementerar asynkrona klasser finns i Implementera det händelsebaserade asynkrona mönstret.