AsyncOperationManager.CreateOperation(Object) Метод

Определение

Возвращает объект AsyncOperation для контроля длительности конкретной асинхронной операции.

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

Параметры

userSuppliedState
Object

Объект, используемый для связи элемента состояния клиента, например идентификатора задачи, с конкретной асинхронной операцией.

Возвращаемое значение

Объект AsyncOperation, который можно использовать для контроля длительности вызова асинхронного метода.

Примеры

В следующем примере кода демонстрируется использование CreateOperation метода для создания System.ComponentModel.AsyncOperation для отслеживания длительности асинхронных операций. Этот пример входит в состав более крупного примера использования класса AsyncOperationManager.

// 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

Комментарии

Метод CreateOperation возвращает объект , System.ComponentModel.AsyncOperation который можно использовать для отслеживания длительности конкретной асинхронной операции и оповещения модели приложения по завершении операции. Его также можно использовать для публикации обновлений хода выполнения и добавочных результатов без завершения операции. будет System.ComponentModel.AsyncOperation правильно маршалировать эти вызовы в соответствующий поток или контекст для модели приложения.

Если вы реализуете класс, поддерживающий асинхронный шаблон на основе событий, класс должен вызывать CreateOperation каждый раз при вызове метода MethodNameAsync . Клиентское приложение, которое выполняет вызовы метода, может использовать userSuppliedState параметр для уникальной идентификации каждого вызова, чтобы различать события, возникающие во время выполнения асинхронной операции.

Внимание!

Клиентский код должен предоставлять уникальное userSuppliedState значение для параметра . Неуникальный идентификатор задач может привести к неправильному отчету о ходе реализации и других событиях. Код должен проверка для неуникальный идентификатор задачи и вызывать исключение при System.ArgumentException обнаружении.

Код должен отслеживать каждый System.ComponentModel.AsyncOperation возвращаемый методом CreateOperation и использовать объект в соответствующей базовой асинхронной операции для последующего обновления и завершения операции. Это отслеживание может быть таким же простым, как передача в System.ComponentModel.AsyncOperation качестве параметра между делегатами. В более сложных проектах класс может поддерживать коллекцию System.ComponentModel.AsyncOperation объектов, добавляя объекты при запуске задач и удаляя их при выполнении или отмене задач. Этот подход позволяет проверка для уникальных userSuppliedState значений параметров и является методом, который следует использовать при работе с классами, поддерживающими несколько одновременных вызовов.

Дополнительные сведения о реализации асинхронных классов см. в статье Реализация асинхронного шаблона на основе событий.

Применяется к

См. также раздел