Elemen <ThrowUnobservedTaskExceptions>
Menentukan apakah pengecualian tugas yang tidak ditangani harus menghentikan proses yang sedang berjalan.
<konfigurasi>
<runtime>
<ThrowUnobservedTaskExceptions>
Sintaks
<ThrowUnobservedTaskExceptions
enabled="true|false"/>
Atribut dan Elemen
Bagian berikut menjelaskan atribut, elemen turunan, dan elemen induk.
Atribut
Atribut | Deskripsi |
---|---|
enabled |
Atribut yang diperlukan. Menentukan apakah pengecualian tugas yang tidak ditangani harus menghentikan proses yang sedang berjalan. |
Atribut yang diaktifkan
Nilai | Deskripsi |
---|---|
false |
Tidak menghentikan proses yang sedang berjalan untuk pengecualian tugas yang tidak ditangani. Ini adalah default. |
true |
Mengakhiri proses yang sedang berjalan untuk pengecualian tugas yang tidak ditangani. |
Elemen Anak
Tidak ada.
Elemen Induk
Elemen | Deskripsi |
---|---|
configuration |
Elemen akar di setiap file konfigurasi yang digunakan oleh runtime bahasa umum dan aplikasi .NET Framework. |
runtime |
Berisi informasi tentang opsi inisialisasi runtime bahasa umum. |
Keterangan
Jika pengecualian yang terkait dengan Task belum diamati, tidak ada operasi Wait, induk tidak dilampirkan, dan properti Task.Exception tidak dibaca, pengecualian tugas dianggap tidak diamati.
Di .NET Framework 4, secara default jika Task yang memiliki pengecualian yang tidak teramati adalah sampah yang dikumpulkan, finalizer menampilkan pengecualian dan menghentikan proses. Penghentian proses ditentukan oleh waktu pengumpulan dan finalisasi sampah.
Untuk memudahkan pengembang menulis kode asinkron berdasarkan tugas, .NET Framework 4.5 mengubah perilaku default ini untuk pengecualian yang tidak teramati. Pengecualian yang tidak teramati masih menyebabkan peristiwa UnobservedTaskException dimunculkan, tetapi secara default, proses tidak dihentikan. Sebaliknya, pengecualian diabaikan setelah peristiwa dimunculkan, terlepas dari apakah penanganan peristiwa mengamati pengecualian.
Dalam .NET Framework 4.5, Anda dapat menggunakan <elemen ThrowUnobservedTaskExceptions> dalam file konfigurasi aplikasi untuk mengaktifkan perilaku .NET Framework 4 melemparkan pengecualian.
Anda juga dapat menentukan perilaku pengecualian dengan salah satu cara berikut:
Dengan mengatur variabel lingkungan
COMPlus_ThrowUnobservedTaskExceptions
(set COMPlus_ThrowUnobservedTaskExceptions=1
).Dengan mengatur nilai DWORD registri ThrowUnobservedTaskExceptions = 1 di kunci HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework.
Contoh 1
Contoh berikut menunjukkan cara mengaktifkan penampilan pengecualian dalam tugas menggunakan file konfigurasi aplikasi.
<configuration>
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
</configuration>
Contoh 2
Contoh berikut menunjukkan cara pengecualian yang tidak teramati ditampilkan dari tugas. Kode harus dijalankan sebagai program yang dirilis agar berfungsi dengan benar.
using System;
using System.Threading;
using System.Collections.Generic;
using System.Threading.Tasks;
//Use the following config settings to enable the throwing of unobserved exceptions.
// <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
// <ThrowUnobservedTaskExceptions enabled="true"/>
public class Example
{
static void Main()
{
Task.Run(() => { throw new InvalidOperationException("test"); });
while (true)
{
Thread.Sleep(100);
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
}
Imports System.Threading
Imports System.Threading.Tasks
'Use the following config settings to enable the throwing of unobserved exceptions.
' <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
' <ThrowUnobservedTaskExceptions enabled="true"/>
Public Class Example
Shared Sub Main()
Task.Run(Sub() Throw New InvalidOperationException("test"))
Do
Thread.Sleep(100)
GC.Collect()
GC.WaitForPendingFinalizers()
Loop
End Sub
End Class
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk