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
Im folgenden Codebeispiel wird die Verwendung der CreateOperation Methode zum Erstellen einer System.ComponentModel.AsyncOperation Nachverfolgung der Dauer asynchroner Vorgänge veranschaulicht. 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 Wert zurück, mit dem Sie die Dauer eines bestimmten asynchronen Vorgangs nachverfolgen und das Anwendungsmodell benachrichtigen können, wenn der Vorgang abgeschlossen ist. Sie können es auch verwenden, um Fortschrittsupdates und inkrementelle Ergebnisse zu veröffentlichen, ohne den Vorgang zu beenden. Diese System.ComponentModel.AsyncOperation Aufrufe werden ordnungsgemäß an den entsprechenden Thread oder Kontext für das Anwendungsmodell gepostert.
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 an die Methode vornimmt, kann den userSuppliedState
Parameter verwenden, um jede Aufrufe eindeutig zu identifizieren, damit Ereignisse unterschieden werden, 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 einen System.ArgumentException auslösen, wenn eine erkannt wird.
Der Code sollte alle System.ComponentModel.AsyncOperation zurückgegebenen Elemente nachverfolgen CreateOperation und das Objekt im entsprechenden zugrunde liegenden asynchronen Vorgang verwenden, um Updates zu posten und den Vorgang zu beenden. Diese Nachverfolgung kann so einfach sein, dass der System.ComponentModel.AsyncOperation Parameter zwischen Stellvertretungen übergeben wird. In komplexeren Designs kann Ihre Klasse eine Sammlung von System.ComponentModel.AsyncOperation Objekten verwalten, Objekte hinzufügen, wenn Aufgaben gestartet und entfernt werden, wenn Aufgaben abgeschlossen oder abgebrochen werden. Mit diesem Ansatz können Sie nach eindeutigen userSuppliedState
Parameterwerten suchen und ist die Methode, die Sie beim Arbeiten mit Klassen verwenden sollten, die mehrere gleichzeitige Aufrufe unterstützen.
Weitere Informationen zum Implementieren asynchroner Klassen finden Sie unter Implementieren des ereignisbasierten asynchronen Musters.