Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Menentukan apakah pengecualian tugas yang tidak tertangani harus mengakhiri proses yang sedang berjalan.
<configuration>
<runtime>
<ThrowUnobservedTaskExceptions>
Syntax
<ThrowUnobservedTaskExceptions
enabled="true|false"/>
Atribut dan Elemen
Bagian berikut menjelaskan atribut, elemen turunan, dan elemen induk.
Attributes
| Attribute | Description |
|---|---|
enabled |
Atribut yang diperlukan. Menentukan apakah pengecualian tugas yang tidak tertangani harus mengakhiri proses yang sedang berjalan. |
Atribut yang diaktifkan
| Nilai | Description |
|---|---|
false |
Tidak mengakhiri proses yang sedang berjalan untuk pengecualian tugas yang tidak tertangani. Ini adalah default. |
true |
Mengakhiri proses yang sedang berjalan untuk pengecualian tugas yang tidak tertangani. |
Elemen Anak
Tidak ada.
Elemen Induk
| Elemen | Description |
|---|---|
configuration |
Elemen akar di setiap file konfigurasi yang digunakan oleh runtime dan aplikasi .NET Framework. |
runtime |
Berisi informasi tentang opsi inisialisasi runtime. |
Komentar
Jika pengecualian yang terkait dengan Task belum diamati, tidak Wait ada operasi, induk tidak dilampirkan, dan Task.Exception properti tidak membaca pengecualian tugas dianggap tidak ditayangkan.
Dalam .NET Framework 4, secara default, jika Task yang memiliki pengecualian yang tidak ditayangkan adalah sampah yang dikumpulkan, finalizer melemparkan pengecualian dan mengakhiri proses. Penghentian proses ditentukan oleh waktu pengumpulan dan finalisasi sampah.
Untuk mempermudah pengembang menulis kode asinkron berdasarkan tugas, .NET Framework 4.5 mengubah perilaku default ini untuk pengecualian yang tidak ditangguhkan. Pengecualian yang tidak ditayangkan masih menyebabkan UnobservedTaskException peristiwa dinaikkan, tetapi secara default, proses tidak berakhir. Sebaliknya, pengecualian diabaikan setelah peristiwa dinaikkan, terlepas dari apakah penanganan aktivitas mengamati pengecualian.
Di .NET Framework 4.5, Anda dapat menggunakan <ThrowUnobservedTaskExceptions> elemen dalam file konfigurasi aplikasi untuk mengaktifkan perilaku .NET Framework 4 untuk melemparkan pengecualian.
Anda juga dapat menentukan perilaku pengecualian dengan salah satu cara berikut:
Dengan mengatur variabel
COMPlus_ThrowUnobservedTaskExceptionslingkungan (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 pelemparan pengecualian dalam tugas dengan menggunakan file konfigurasi aplikasi.
<configuration>
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
</configuration>
Contoh 2
Contoh berikut menunjukkan bagaimana pengecualian yang tidak ditayangkan dilemparkan 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