<ThrowUnobservedTaskExceptions> Öğesi
İşlenmeyen görev özel durumlarının çalışan bir işlemi sonlandırması gerekip gerekmediğini belirtir.
<Yapılandırma>
<Çalışma zamanı>
<ThrowUnobservedTaskExceptions>
Syntax
<ThrowUnobservedTaskExceptions
enabled="true|false"/>
Öznitelikler ve Öğeler
Öznitelikler, alt ve üst öğeler aşağıdaki bölümlerde açıklanmaktadır.
Öznitelikler
Öznitelik | Açıklama |
---|---|
enabled |
Gerekli öznitelik. İşlenmeyen görev özel durumlarının çalışan işlemi sonlandırıp sonlandırmayacağını belirtir. |
etkin Öznitelik
Değer | Açıklama |
---|---|
false |
İşlenmeyen bir görev özel durumu için çalışan işlemi sonlandırmaz. Bu varsayılan seçenektir. |
true |
İşlenmeyen bir görev özel durumu için çalışan işlemi sonlandırır. |
Alt Öğeler
Yok.
Üst Öğeler
Öğe | Açıklama |
---|---|
configuration |
Her yapılandırma dosyasında yer alan ve ortak dil çalışma zamanı ve .NET Framework uygulamaları tarafından kullanılan kök öğe. |
runtime |
Çalışma zamanı başlatma seçenekleri hakkında bilgi içerir. |
Açıklamalar
ile Task ilişkilendirilmiş bir özel durum gözlemlenmediyse, işlem yoktur Wait , üst öğe eklenmez ve Task.Exception özellik okunmadı görev özel durumunun gözlemlenmediği kabul edilir.
.NET Framework 4'te, varsayılan olarak, gözlemlenmeyen bir özel durumu olan bir çöp toplanırsaTask, sonlandırıcı bir özel durum oluşturur ve işlemi sonlandırır. İşlemin sonlandırılması, çöp toplama ve sonlandırma zamanlamasına göre belirlenir.
Geliştiricilerin görevlere göre zaman uyumsuz kod yazmasını kolaylaştırmak için .NET Framework 4.5, gözlemlenmeyen özel durumlar için bu varsayılan davranışı değiştirir. Gözlemlenmeyen UnobservedTaskException özel durumlar yine de olayın tetiklenmelerine neden olur, ancak varsayılan olarak işlem sonlandırılmaz. Bunun yerine, bir olay işleyicisinin özel durumu gözlemleyip gözlemlemediğine bakılmaksızın, olay tetiklendikten sonra özel durum yoksayılır.
.NET Framework 4.5'te, bir özel durum oluşturmanın .NET Framework 4 davranışını etkinleştirmek için uygulama yapılandırma dosyasında ThrowUnobservedTaskExceptions> öğesini kullanabilirsiniz.<
Özel durum davranışını aşağıdaki yollardan biriyle de belirtebilirsiniz:
Ortam değişkenini
COMPlus_ThrowUnobservedTaskExceptions
(set COMPlus_ThrowUnobservedTaskExceptions=1
) ayarlayarak.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework anahtarında ThrowUnobservedTaskExceptions = 1 kayıt defteri DWORD değerini ayarlayarak.
Örnek 1
Aşağıdaki örnekte, bir uygulama yapılandırma dosyası kullanarak görevlerde özel durumların nasıl atılması etkinleştirileceği gösterilmektedir.
<configuration>
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
</configuration>
Örnek 2
Aşağıdaki örnekte, bir görevden gözlemlenmeyen özel durumun nasıl atıldığı gösterilmektedir. Kodun düzgün çalışması için serbest bırakılmış bir program olarak çalıştırılması gerekir.
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