AsyncOperation 类

定义

跟踪异步操作的生存期。

public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
继承
AsyncOperation

示例

下面的代码示例演示如何使用 AsyncOperation 对象跟踪异步操作的生存期。 此代码示例是为 System.ComponentModel.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

注解

根据 基于事件的异步模式概述实现类时,可能需要跟踪对类实例调用的每个异步操作的生存期。 类 AsyncOperation 提供跟踪和报告异步任务进度的方法。

以下列表标识了使用 AsyncOperation 对象的方法:

  • 若要向客户端报告进度和中间结果,请从异步工作器代码调用 Post

  • 若要指示异步任务已完成,或要取消挂起的异步任务,请调用 PostOperationCompleted

类应通过在每个任务启动时调用 AsyncOperationManager.CreateOperation 来获取AsyncOperation每个异步任务的 对象。 若要允许客户端区分不同的异步任务, AsyncOperationManager.CreateOperation 请获取客户端提供的唯一令牌的 参数,该令牌成为 UserSuppliedState 属性。 然后,客户端代码可以使用它来标识引发进度或完成事件的特定异步任务。

继承者说明

实现者必须确保 PostOperationCompleted(SendOrPostCallback, Object)Post(SendOrPostCallback, Object) 调用是异步的,因此,如果类库提供程序假定特定应用程序模型中的异步行为恰好是同步的,则无需担心潜在的堆栈溢出。

有关实现异步类的详细信息,请参阅 实现基于事件的异步模式

属性

SynchronizationContext

获取传递给构造函数的 SynchronizationContext 对象。

UserSuppliedState

获取或设置用于唯一标识异步操作的对象。

方法

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
Finalize()

完成异步操作。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetType()

获取当前实例的 Type

(继承自 Object)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
OperationCompleted()

结束异步操作的生存期。

Post(SendOrPostCallback, Object)

在适合于应用程序模型的线程或上下文中调用委托。

PostOperationCompleted(SendOrPostCallback, Object)

结束异步操作的生存期。

ToString()

返回表示当前对象的字符串。

(继承自 Object)

适用于

另请参阅