Megosztás a következőn keresztül:


<ThrowUnobservedTaskExceptions> elem

Megadja, hogy a nem kezelt tevékenységkivételeknek le kell-e zárniuk egy futó folyamatot.

<Konfigurációs>
  <Runtime>
    <ThrowUnobservedTaskExceptions>

Syntax

<ThrowUnobservedTaskExceptions  
   enabled="true|false"/>  

Attribútumok és elemek

Az alábbi szakaszok az attribútumokat, a gyermekelemeket és a szülőelemeket ismertetik.

Attribútumok

Attribútum Leírás
enabled Kötelező attribútum.

Megadja, hogy a nem kezelt tevékenységkivételeket le kell-e zárni a futó folyamatról.

enabled attribute

Érték Leírás
false Nem szünteti meg a nem kezelt feladatkivétel futó folyamatát. Ez az alapértelmezett beállítás.
true Leállítja a nem kezelt feladatkivétel futó folyamatát.

Gyermekelemek

Nincsenek.

Szülőelemek

Elem Leírás
configuration A közös nyelvi futtatókörnyezet és .NET-keretrendszer alkalmazások által használt összes konfigurációs fájl gyökéreleme.
runtime Információkat tartalmaz a futtatókörnyezet inicializálási lehetőségeiről.

Megjegyzések

Ha nem figyelték meg az a-hez Task társított kivételt, nincs Wait művelet, a szülő nincs csatolva, és a Task.Exception tulajdonság nem lett elolvasva, a feladatkivételt a rendszer nem figyeltnek tekinti.

A .NET-keretrendszer 4-ben alapértelmezés szerint, ha egy Task nem észlelt kivétellel rendelkező szemétgyűjtés történik, a véglegesítő kivételt ad, és leállítja a folyamatot. A folyamat befejezését a szemétgyűjtés és a véglegesítés időzítése határozza meg.

Annak érdekében, hogy a fejlesztők egyszerűbben írjanak aszinkron kódot a feladatok alapján, a .NET-keretrendszer 4.5 megváltoztatja ezt az alapértelmezett viselkedést a nem engedélyezett kivételek esetében. A nem engedélyezett kivételek továbbra is az UnobservedTaskException eseményt okozzák, de alapértelmezés szerint a folyamat nem fejeződik be. Ehelyett a rendszer figyelmen kívül hagyja a kivételt az esemény létrehozása után, függetlenül attól, hogy egy eseménykezelő megfigyeli-e a kivételt.

A .NET-keretrendszer 4.5-ben az alkalmazáskonfigurációs fájl ThrowUnobservedTaskExceptions> elemével engedélyezheti a kivétel .NET-keretrendszer 4 viselkedését.<

A kivétel viselkedését az alábbi módok egyikével is megadhatja:

  • A környezeti változó COMPlus_ThrowUnobservedTaskExceptions (set COMPlus_ThrowUnobservedTaskExceptions=1) beállításával.

  • A throwUnobservedTaskExceptions = 1 beállításjegyzékbeli DWORD érték beállításával a HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework kulcsban.

1\. példa

Az alábbi példa bemutatja, hogyan engedélyezheti a kivételek kivetését a feladatokban egy alkalmazáskonfigurációs fájl használatával.

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

2\. példa

Az alábbi példa bemutatja, hogyan történik egy nem megfigyelt kivétel kiesése egy tevékenységből. A kódnak kiadott programként kell futnia, hogy megfelelően működjön.

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

Lásd még