Sinkronisasi klasik menggunakan
Klasik menggunakan panggilan Dispose()
metode objek yang mengimplementasikan IDisposable
antarmuka.
using var disposable = new Disposable();
// Do Something...
Setara dengan
IDisposable disposable = new Disposable();
try
{
// Do Something...
}
finally
{
disposable.Dispose();
}
Async baru menunggu untuk digunakan
Yang baru menunggu menggunakan panggilan dan menunggu DisposeAsync()
metode objek yang mengimplementasikan IAsyncDisposable
antarmuka.
await using var disposable = new AsyncDisposable();
// Do Something...
Setara dengan
IAsyncDisposable disposable = new AsyncDisposable();
try
{
// Do Something...
}
finally
{
await disposable.DisposeAsync();
}
The IAsyncDisposable Antarmuka ditambahkan pada .NET Core 3.0
dan .NET Standard 2.1
.
Di .NET, kelas yang memiliki sumber daya yang tidak dikelola biasanya mengimplementasikan antarmuka IDisposable untuk menyediakan mekanisme untuk melepaskan sumber daya yang tidak dikelola secara serempak. Namun, dalam beberapa kasus mereka perlu menyediakan mekanisme asinkron untuk melepaskan sumber daya yang tidak dikelola selain (atau bukannya) yang sinkron . Menyediakan mekanisme semacam itu memungkinkan konsumen untuk melakukan operasi pembuangan sumber daya intensif tanpa memblokir utas aplikasi GUI untuk waktu yang lama.
The IAsyncDisposable.DisposeAsync metode interface ini mengembalikan ValueTask yang mewakili operasi buang asynchronous. Kelas yang memiliki sumber daya yang tidak dikelola menerapkan metode ini, dan konsumen kelas-kelas ini memanggil metode ini pada objek ketika tidak lagi diperlukan.
await using
denganIAsyncDisposable
dan Anda hanya dapat menggunakanusing
denganIDisposable
karena tidak ada yang mewarisi dari yang lain. Satu-satunya waktu Anda dapat menggunakan salah satunya adalah jika kelas beton mengimplementasikan keduanya dan kemudian tergantung pada apakah Anda menulis kode asinkron atau tidak.