非同步程式設計模式
.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);
}