Pola pemrograman asinkron
.NET menyediakan tiga pola untuk melakukan operasi asinkron:
Pola Asinkron Berbasis Tugas (TAP) yang menggunakan satu metode untuk mewakili inisiasi dan penyelesaian operasi asinkron. TAP diperkenalkan pada .NET Framework 4. Pola ini merupakan pendekatan yang direkomendasikan untuk pemrograman asinkron di .NET. Kata kunci asinkron dan await di C# dan operator Async dan Await di Visual Basic menambahkan dukungan bahasa untuk TAP. Untuk mengetahui informasi selengkapnya, lihat Pola Asinkron Berbasis Tugas (TAP).
Pola Asinkron Berbasis Peristiwa (EAP) yang merupakan model warisan berbasis peristiwa untuk menyediakan perilaku asinkron. Penyediaan ini memerlukan metode yang memiliki akhiran
Async
dan satu atau beberapa peristiwa, jenis delegasi penanganan aktivitas, dan jenis turunanEventArg
. EAP diperkenalkan pada .NET Framework 2.0. Tidak lagi direkomendasikan untuk pengembangan baru. Untuk mengetahui informasi selengkapnya, lihat Pola Asinkron Berbasis Tugas (TAP).Pola Model Pemrograman Asinkron (APM) ( juga disebut pola IAsyncResult) yang merupakan model warisan yang menggunakan antarmuka IAsyncResult untuk memberikan perilaku asinkron. Dalam pola ini, operasi sinkron memerlukan metode
Begin
danEnd
(misalnya,BeginWrite
danEndWrite
untuk menerapkan operasi tulis asinkron). Pola ini tidak lagi direkomendasikan untuk pengembangan baru. Untuk mengetahui informasi selengkapnya, lihat Model Pemrograman Asinkron (APM).
Perbandingan pola
Untuk perbandingan cepat tentang bagaimana tiga pola memodelkan operasi asinkron, pertimbangkan metode Read
yang membaca jumlah data tertentu ke dalam buffer yang disediakan mulai dari offset tertentu:
public class MyClass
{
public int Read(byte [] buffer, int offset, int count);
}
Rekan TAP dari metode ini akan mengekspos metode tunggal ReadAsync
berikut:
public class MyClass
{
public Task<int> ReadAsync(byte [] buffer, int offset, int count);
}
Rekan EAP akan mengekspos serangkaian jenis dan anggota berikut:
public class MyClass
{
public void ReadAsync(byte [] buffer, int offset, int count);
public event ReadCompletedEventHandler ReadCompleted;
}
Rekan APM akan mengekspos metode BeginRead
dan EndRead
:
public class MyClass
{
public IAsyncResult BeginRead(
byte [] buffer, int offset, int count,
AsyncCallback callback, object state);
public int EndRead(IAsyncResult asyncResult);
}