.NET 提供了三種非同步編程模型 TAP - task-based asynchronous pattern APM - asynchronous programming model EAP - event-based asynchronous pattern 模型對比 比如有一個同步方法,讀取一定 ...
.NET 提供了三種非同步編程模型
- TAP - task-based asynchronous pattern
- APM - asynchronous programming model
- EAP - event-based asynchronous pattern
模型對比
比如有一個同步方法,讀取一定數量的數據,存放到給定緩存中,並指定開始偏移量。
public class MyClass
{
public int Read(byte [] buffer, int offset, int count);
}
TAP
TAP是基於任務的非同步模式,使用單一方法來表示非同步操作的啟動和完成,是在 .NET Framework 4 中引入的。TAP是推薦的非同步編程模型。C#中的 async 和 await 以及 Visual Basic 中 Async 和 Await 關鍵字添加了對 TAP 的語言支持。
public class MyClass
{
public Task<int> ReadAsync(byte [] buffer, int offset, int count);
}
EAP
EAP 是基於事件的非同步模型,在 .NET Framework 2.0 中引入。EAP 需要一個有 Async 尾碼方法和一個或多個事件。EAP不再推薦用於新開發
public class MyClass
{
public void ReadAsync(byte [] buffer, int offset, int count);
public event ReadCompletedEventHandler ReadCompleted;
}
APM
APM 使用 IAsyncResult 介面提供非同步行為的模型。非同步方法需要以 Begin 和 End 開始(比如 BeginWrite 和 EndWrite ).APM不再推薦用於新開發
public class MyClass
{
public IAsyncResult BeginRead(
byte [] buffer, int offset, int count,
AsyncCallback callback, object state);
public int EndRead(IAsyncResult asyncResult);
}