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)

適用於

另請參閱