<elemento > ThrowUnobservedTaskExceptions<ThrowUnobservedTaskExceptions> Element

Specifica se le eccezioni di attività non gestite devono comportare l'arresto di un processo in esecuzione.Specifies whether unhandled task exceptions should terminate a running process.

<configuration> <configuration>
    <runtime >   <runtime>
     <ThrowUnobservedTaskExceptions >    <ThrowUnobservedTaskExceptions>

SintassiSyntax

<ThrowUnobservedTaskExceptions  
   enabled="true|false"/>  

Attributi ed elementiAttributes and Elements

Nelle sezioni seguenti vengono descritti gli attributi, gli elementi figlio e gli elementi padre.The following sections describe attributes, child elements, and parent elements.

AttributiAttributes

AttributoAttribute DescrizioneDescription
enabled Attributo obbligatorio.Required attribute.

Specifica se le eccezioni di attività non gestite devono comportare l'arresto del processo in esecuzione.Specifies whether unhandled task exceptions should terminate the running process.

Attributo enabledenabled Attribute

ValueValue DescrizioneDescription
false Non termina il processo in esecuzione per un'eccezione di attività non gestita.Does not terminate the running process for an unhandled task exception. Questa è l'impostazione predefinita.This is the default.
true Termina il processo in esecuzione per un'eccezione di attività non gestita.Terminates the running process for an unhandled task exception.

Elementi figlioChild Elements

Nessuna.None.

Elementi padreParent Elements

ElementoElement DescrizioneDescription
configuration Elemento radice in ciascun file di configurazione usato in Common Language Runtime e nelle applicazioni .NET Framework.The root element in every configuration file used by the common language runtime and .NET Framework applications.
runtime Contiene informazioni sulle opzioni di inizializzazione in fase di esecuzione.Contains information about runtime initialization options.

NoteRemarks

Se un'eccezione associata a un oggetto Task non è stata osservata, non esiste alcuna operazione Wait, l'elemento padre non è associato, la proprietà Task.Exception non è stata letta e l'eccezione di attività viene considerata non osservata.If an exception that is associated with a Task has not been observed, there is no Wait operation, the parent is not attached, and the Task.Exception property was not read the task exception is considered to be unobserved.

Nel .NET Framework 4, per impostazione predefinita, se una Task con un'eccezione non osservata viene sottoposta a Garbage Collection, il finalizzatore genera un'eccezione e termina il processo.In the .NET Framework 4, by default, if a Task that has an unobserved exception is garbage collected, the finalizer throws an exception and terminates the process. L'interruzione del processo è determinata dall'intervallo di Garbage Collection e finalizzazione.The termination of the process is determined by the timing of garbage collection and finalization.

Per semplificare la scrittura di codice asincrono in base alle attività da parte degli sviluppatori, il .NET Framework 4,5 modifica questo comportamento predefinito per le eccezioni non osservate.To make it easier for developers to write asynchronous code based on tasks, the .NET Framework 4.5 changes this default behavior for unobserved exceptions. Le eccezioni non osservate comportano ancora la generazione dell'evento UnobservedTaskException, ma, per impostazione predefinita, il processo non viene terminato.Unobserved exceptions still cause the UnobservedTaskException event to be raised, but by default, the process does not terminate. Invece, l'eccezione viene ignorata dopo la generazione dell'evento, indipendentemente dal fatto che l'eccezione venga rilevata da un gestore eventi.Instead, the exception is ignored after the event is raised, regardless of whether an event handler observes the exception.

Nel .NET Framework 4,5, è possibile usare l' elemento > di<ThrowUnobservedTaskExceptions in un file di configurazione dell'applicazione per abilitare il comportamento .NET Framework 4 della generazione di un'eccezione.In the .NET Framework 4.5, you can use the <ThrowUnobservedTaskExceptions> element in an application configuration file to enable the .NET Framework 4 behavior of throwing an exception.

Il comportamento dell'eccezione può anche essere specificato in uno dei modi seguenti:You can also specify the exception behavior in one of the following ways:

  • Impostando la variabile di ambiente COMPlus_ThrowUnobservedTaskExceptions (set COMPlus_ThrowUnobservedTaskExceptions=1).By setting the environment variable COMPlus_ThrowUnobservedTaskExceptions (set COMPlus_ThrowUnobservedTaskExceptions=1).

  • Impostando il valore DWORD del registro di sistema ThrowUnobservedTaskExceptions = 1 nella\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft. Chiave di NETFramework.By setting the registry DWORD value ThrowUnobservedTaskExceptions = 1 in the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework key.

EsempioExample

Nell'esempio seguente viene illustrato come abilitare la generazione di eccezioni nelle attività tramite un file di configurazione dell'applicazione.The following example shows how to enable the throwing of exceptions in tasks by using an application configuration file.

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

EsempioExample

Nell'esempio seguente viene illustrata la modalità di generazione di un'eccezione non osservata da parte di un'attività.The following example demonstrates how an unobserved exception is thrown from a task. Il codice deve essere eseguito come programma rilasciato per funzionare correttamente.The code must be run as a released program to work correctly.

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

Vedere ancheSee also