AsyncOperationManager.CreateOperation(Object) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt für die Überwachung der Dauer eines bestimmten asynchronen Vorgangs eine AsyncOperation zurück.
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
Parameter
- userSuppliedState
- Object
Ein Objekt, das dazu verwendet wird, einem bestimmten asynchronen Vorgang einen Bestandteil des Clientzustands, z. B. eine Aufgaben-ID, zuzuordnen.
Gibt zurück
Eine AsyncOperation, die Sie verwenden können, um die Dauer eines asynchronen Methodenaufrufs zu verfolgen.
Beispiele
Das folgende Codebeispiel veranschaulicht die Verwendung der CreateOperation -Methode zum Erstellen eines System.ComponentModel.AsyncOperation zum Nachverfolgen der Dauer asynchroner Vorgänge. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die AsyncOperationManager-Klasse bereitgestellt wird.
// 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",
"taskId");
}
userStateToLifetime[taskId] = asyncOp;
}
// Start the asynchronous operation.
WorkerEventHandler workerDelegate = new WorkerEventHandler(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
Hinweise
Die CreateOperation -Methode gibt einen System.ComponentModel.AsyncOperation zurück, mit dem Sie die Dauer eines bestimmten asynchronen Vorgangs nachverfolgen und das Anwendungsmodell nach Abschluss des Vorgangs benachrichtigen können. Sie können es auch verwenden, um Statusaktualisierungen und inkrementelle Ergebnisse zu veröffentlichen, ohne den Vorgang zu beenden. Die System.ComponentModel.AsyncOperation marshallt diese Aufrufe ordnungsgemäß an den entsprechenden Thread oder Kontext für das Anwendungsmodell.
Wenn Sie eine Klasse implementieren, die das ereignisbasierte asynchrone Muster unterstützt, sollte Ihre Klasse jedes Mal aufrufen CreateOperation , wenn Ihre MethodName-MethodeAsync
aufgerufen wird. Die Clientanwendung, die Aufrufe der -Methode durchführt, kann den userSuppliedState
Parameter verwenden, um jeden Aufruf eindeutig zu identifizieren, um Ereignisse zu unterscheiden, die während der Ausführung des asynchronen Vorgangs ausgelöst werden.
Achtung
Clientcode muss einen eindeutigen Wert für den userSuppliedState
Parameter bereitstellen. Nicht eindeutige Aufgaben-IDs können dazu führen, dass Ihre Implementierung den Fortschritt und andere Ereignisse falsch meldet. Ihr Code sollte nach einer nicht eindeutigen Aufgaben-ID suchen und eine System.ArgumentException auslösen, wenn eine erkannt wird.
Ihr Code sollte alle System.ComponentModel.AsyncOperation von CreateOperation zurückgegebenen Daten nachverfolgen und das -Objekt im entsprechenden zugrunde liegenden asynchronen Vorgang verwenden, um Updates zu veröffentlichen und den Vorgang zu beenden. Diese Nachverfolgung kann so einfach sein, wie die Übergabe von System.ComponentModel.AsyncOperation als Parameter zwischen Delegaten. In komplexeren Designs kann Ihre Klasse eine Auflistung von System.ComponentModel.AsyncOperation Objekten verwalten, Objekte hinzufügen, wenn Aufgaben gestartet werden, und sie entfernen, wenn Aufgaben abgeschlossen oder abgebrochen werden. Dieser Ansatz ermöglicht es Ihnen, nach eindeutigen userSuppliedState
Parameterwerten zu suchen, und ist die Methode, die Sie verwenden sollten, wenn Sie mit Klassen arbeiten, die mehrere gleichzeitige Aufrufe unterstützen.
Weitere Informationen zum Implementieren asynchroner Klassen finden Sie unter Implementieren des ereignisbasierten asynchronen Musters.