共用方式為


異步程序設計模式

.NET 提供三種模式來執行異步操作:

  • 以工作為基礎的異步模式 (TAP),它會使用單一方法來表示異步操作的開始和完成。 TAP 已在 .NET Framework 4 中引進。 這是 .NET 中異步程序設計的建議方法。 C# 中的 asyncawait 關鍵詞和 Visual Basic 中的 AsyncAwait 運算子會新增 TAP 的語言支援。 如需詳細資訊,請參閱以工作為基礎的異步模式(TAP)。

  • 事件架構異步模式 (EAP),這是用來提供異步行為的事件型舊版模型。 它需要具有 Async 後綴和一或多個事件、事件處理程式委派型別和 EventArg衍生型別的方法。 EAP 已在 .NET Framework 2.0 中引進。 不建議再進行新的開發。 如需詳細資訊,請參閱事件架構異步模式(EAP)。

  • 異步程序設計模型 (APM) 模式 ( 也稱為 IAsyncResult 模式),這是使用 IAsyncResult 介面提供異步行為的舊版模型。 在此模式中,異步作需要 BeginEnd 方法(例如, BeginWrite 以及 EndWrite 實作異步寫入作業)。 新開發不再建議使用此模式。 如需詳細資訊,請參閱異步程序設計模型(APM)。

模式的比較

若要快速比較三種模式建模異步操作的方式,請考慮一種方法,將Read指定數量的數據從指定的偏移量讀取到所提供的緩衝區:

public class MyClass  
{  
    public int Read(byte [] buffer, int offset, int count);  
}  

這個方法的 TAP 對應項目會公開下列單一 ReadAsync 方法:

public class MyClass  
{  
    public Task<int> ReadAsync(byte [] buffer, int offset, int count);  
}  

EAP 對應項目會公開下列一組類型和成員:

public class MyClass  
{  
    public void ReadAsync(byte [] buffer, int offset, int count);  
    public event ReadCompletedEventHandler ReadCompleted;  
}  

APM 對應項目會公開 BeginReadEndRead 方法:

public class MyClass  
{  
    public IAsyncResult BeginRead(  
        byte [] buffer, int offset, int count,
        AsyncCallback callback, object state);  
    public int EndRead(IAsyncResult asyncResult);  
}  

另請參閱