.NET 提供三種模式來執行異步操作:
以工作為基礎的異步模式 (TAP),它會使用單一方法來表示異步操作的開始和完成。 TAP 已在 .NET Framework 4 中引進。 這是 .NET 中異步程序設計的建議方法。 C# 中的 async 和 await 關鍵詞和 Visual Basic 中的 Async 和 Await 運算子會新增 TAP 的語言支援。 如需詳細資訊,請參閱以工作為基礎的異步模式(TAP)。
事件架構異步模式 (EAP),這是用來提供異步行為的事件型舊版模型。 它需要具有
Async
後綴和一或多個事件、事件處理程式委派型別和EventArg
衍生型別的方法。 EAP 已在 .NET Framework 2.0 中引進。 不建議再進行新的開發。 如需詳細資訊,請參閱事件架構異步模式(EAP)。異步程序設計模型 (APM) 模式 ( 也稱為 IAsyncResult 模式),這是使用 IAsyncResult 介面提供異步行為的舊版模型。 在此模式中,異步作需要
Begin
和End
方法(例如,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 對應項目會公開 BeginRead
和 EndRead
方法:
public class MyClass
{
public IAsyncResult BeginRead(
byte [] buffer, int offset, int count,
AsyncCallback callback, object state);
public int EndRead(IAsyncResult asyncResult);
}