Aracılığıyla paylaş


<ThrowUnobservedTaskExceptions> Öğe

İşlenmeyen görev özel durumlarının çalışan bir işlemi sonlandırıp sonlandırmayacağını belirtir.

<configuration>
  <runtime>
    <ThrowUnobservedTaskExceptions>

Sözdizimi

<ThrowUnobservedTaskExceptions
   enabled="true|false"/>

Öznitelikler ve Öğeler

Öznitelikler, alt ve üst öğeler aşağıdaki bölümlerde açıklanmaktadır.

Attributes

Özellik Description
enabled Gerekli öznitelik.

İşlenmeyen görev özel durumlarının çalışan işlemi sonlandırıp sonlandırmayacağını belirtir.

enabled Özniteliği

Değer Description
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 Description
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 okunmamışsa görev özel durumunun gözlemlenmediği kabul edilir.

.NET Framework 4'te, varsayılan olarak, gözlemlenmeyen bir özel durumu olan bir atık toplanırsa Task , 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 tetiklenmesine neden olur, ancak varsayılan olarak işlem sonlandırılmaz. Bunun yerine, 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, .NET Framework 4'ün özel durum oluşturma davranışını etkinleştirmek için bir uygulama yapılandırma dosyasındaki öğesini kullanabilirsiniz<ThrowUnobservedTaskExceptions>.

Ö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 durum oluşturmanın nasıl etkinleştirileceği gösterilmektedir.

<configuration>
    <runtime>
        <ThrowUnobservedTaskExceptions enabled="true"/>
    </runtime>
</configuration>

Örnek 2

Aşağıdaki örnek, bir görevden gözlemlenmeyen bir özel durumun nasıl atıldığını gösterir. Kodun düzgün çalışması için yayımlanmış 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 bakınız