<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