Pertanyaan Perbedaan antara OperationCanceledException dan TaskCanceledException?


Apa perbedaan antara OperationCanceledException dan TaskCanceledException? Jika saya menggunakan .NET 4.5 dan menggunakan async/await kata kunci, yang mana yang harus saya cari untuk ditangkap?


76
2017-10-23 22:39


asal


Jawaban:


OperationCanceledException hanyalah kelas dasar untuk TaskCanceledException - jadi jika Anda menangkap yang pertama, Anda akan tetap menangkap yang terakhir.

Beberapa operasi pada koleksi bersamaan hanya membuang OperationCanceledException, karena tidak ada yang sebenarnya tugas terlibat (setidaknya sejauh menyangkut API publik). Lihat BlockingCollection.TryTake untuk sebuah contoh.

Saya akan menangkap OperationCanceledException untuk berjaga-jaga jika tugas dibatalkan karena operasi yang baru saja dilemparkan OperationCanceledException - Anda mungkin masih ingin memperlakukan itu sebagai "hanya pembatalan".


87
2017-10-23 22:46