Dela via


<ThrowUnobservedTaskExceptions-element>

Anger om ohanterade aktivitetsfel ska avsluta en process som körs.

<Konfiguration>
  <Runtime>
    <ThrowUnobservedTaskExceptions>

Syntax

<ThrowUnobservedTaskExceptions  
   enabled="true|false"/>  

Attribut och element

I följande avsnitt beskrivs attribut, underordnade element och överordnade element.

Attribut

Attribut Beskrivning
enabled Obligatoriskt attribut.

Anger om ohanterade aktivitetsfel ska avsluta den pågående processen.

aktiverat attribut

Värde Beskrivning
false Avslutar inte körningsprocessen för ett ohanterat uppgiftsfel. Det här är standardinställningen.
true Avslutar körningsprocessen för ett ohanterat uppgiftsfel.

Underordnade element

Inga.

Överordnade element

Element Beskrivning
configuration Rotelementet i varje konfigurationsfil som används av den vanliga språkkörningen och .NET Framework program.
runtime Innehåller information om initieringsalternativ för körning.

Kommentarer

Om ett undantag som är associerat med ett Task inte har observerats finns det ingen Wait åtgärd, den överordnade åtgärden är inte kopplad och Task.Exception egenskapen lästes inte. Undantagsfelet för aktiviteten anses vara ej observerat.

I .NET Framework 4, som standard, om en Task som har ett undantag som inte har observerats är skräpinsamling, utlöser slutföraren ett undantag och avslutar processen. Avslutningen av processen bestäms av tidpunkten för skräpinsamling och slutförande.

För att göra det enklare för utvecklare att skriva asynkron kod baserat på uppgifter ändrar .NET Framework 4.5 det här standardbeteendet för ej observerade undantag. Undantag som inte har observerats orsakar UnobservedTaskException fortfarande att händelsen aktiveras, men som standard avslutas inte processen. I stället ignoreras undantaget när händelsen utlöses, oavsett om en händelsehanterare observerar undantaget.

I .NET Framework 4.5 kan du använda elementet< ThrowUnobservedTaskExceptions> i en programkonfigurationsfil för att aktivera .NET Framework 4-beteendet att utlösa ett undantag.

Du kan också ange undantagsbeteendet på något av följande sätt:

  • Genom att ange miljövariabeln COMPlus_ThrowUnobservedTaskExceptions (set COMPlus_ThrowUnobservedTaskExceptions=1).

  • Genom att ange registrets DWORD-värde ThrowUnobservedTaskExceptions = 1 i HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework nyckel.

Exempel 1

I följande exempel visas hur du aktiverar utkast av undantag i aktiviteter med hjälp av en programkonfigurationsfil.

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

Exempel 2

I följande exempel visas hur ett undantag som inte observerats genereras från en uppgift. Koden måste köras som ett utgivet program för att fungera korrekt.

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

Se även