Saya mengalami situasi di mana saya melakukan async
panggilan ke metode yang mengembalikan dan IDisposable
contoh. Sebagai contoh:
HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com"));
Sekarang sebelumnya async
ada di tempat kejadian, ketika bekerja dengan sebuah IDisposable
instance, panggilan dan kode ini yang menggunakan variabel "respon" akan dibungkus dalam pernyataan menggunakan.
Pertanyaan saya adalah apakah itu masih merupakan pendekatan yang benar ketika async
kata kunci dimasukkan ke dalam campuran? Meskipun kode dikompilasi, akankah pernyataan using tetap berfungsi seperti yang diharapkan pada kedua contoh di bawah?
Contoh 1
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
// Do something with the response
return true;
}
Contoh 2
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
await this.responseLogger.LogResponseAsync(response);
return true;
}
sumber
using(){...}
blok atau itu berlebihan atau dapat menurunkan kinerja dalam beberapa kasus? Apakahusing(){...}
melayani tujuan yang sama sepertiawait
?using
danawait
melayani tujuan yang sepenuhnya berbeda. Perhatikan bahwa C # 8 sekarang memiliki pembuangan asinkron juga. Meskipun penting untuk menyadari masalah threading, jawaban saya menyoroti, itu pasti tidak berarti salah untuk mencampurusing
danawait
.