Aracılığıyla paylaş


<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

Ayrıca bkz.