<elemento de > ThrowUnobservedTaskExceptions<ThrowUnobservedTaskExceptions> Element

Especifica se as exceções de tarefas sem tratamento devem encerrar um processo em execução.Specifies whether unhandled task exceptions should terminate a running process.

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

SintaxeSyntax

<ThrowUnobservedTaskExceptions  
   enabled="true|false"/>  

Atributos e elementosAttributes and Elements

As seções a seguir descrevem atributos, elementos filho e elementos pai.The following sections describe attributes, child elements, and parent elements.

AtributosAttributes

AtributoAttribute DescriçãoDescription
enabled Atributo obrigatório.Required attribute.

Especifica se exceções de tarefas sem tratamento devem encerrar o processo em execução.Specifies whether unhandled task exceptions should terminate the running process.

Atributo habilitadoenabled Attribute

ValorValue DescriçãoDescription
false Não encerra o processo em execução para uma exceção de tarefa sem tratamento.Does not terminate the running process for an unhandled task exception. Esse é o padrão.This is the default.
true Encerra o processo em execução para uma exceção de tarefa sem tratamento.Terminates the running process for an unhandled task exception.

Elementos filhoChild Elements

nenhuma.None.

Elementos paiParent Elements

ElementoElement DescriçãoDescription
configuration O elemento raiz em cada arquivo de configuração usado pelos aplicativos do Common Language Runtime e .NET Framework.The root element in every configuration file used by the common language runtime and .NET Framework applications.
runtime Contém informações sobre opções de inicialização do runtime.Contains information about runtime initialization options.

ComentáriosRemarks

Se uma exceção associada a um Task não tiver sido observada, não há nenhuma operação de Wait, o pai não está anexado e a propriedade Task.Exception não foi lida, a exceção da tarefa é considerada não observada.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.

No .NET Framework 4, por padrão, se um Task que tenha uma exceção não observada for lixo coletado, o finalizador lançará uma exceção e encerrará o 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. O encerramento do processo é determinado pelo tempo de coleta e finalização de lixo.The termination of the process is determined by the timing of garbage collection and finalization.

Para facilitar para os desenvolvedores a gravação de código assíncrono com base nas tarefas, o .NET Framework 4,5 altera esse comportamento padrão para exceções não observadas.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. Exceções não observadas ainda fazem com que o evento UnobservedTaskException seja gerado, mas por padrão, o processo não é encerrado.Unobserved exceptions still cause the UnobservedTaskException event to be raised, but by default, the process does not terminate. Em vez disso, a exceção é ignorada depois que o evento é gerado, independentemente se um manipulador de eventos observa a exceção.Instead, the exception is ignored after the event is raised, regardless of whether an event handler observes the exception.

No .NET Framework 4,5, você pode usar o elemento<ThrowUnobservedTaskExceptions > em um arquivo de configuração de aplicativo para habilitar o comportamento .NET Framework 4 de gerar uma exceção.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.

Você também pode especificar o comportamento da exceção de uma das seguintes maneiras:You can also specify the exception behavior in one of the following ways:

  • Definindo a variável de ambiente COMPlus_ThrowUnobservedTaskExceptions (set COMPlus_ThrowUnobservedTaskExceptions=1).By setting the environment variable COMPlus_ThrowUnobservedTaskExceptions (set COMPlus_ThrowUnobservedTaskExceptions=1).

  • Definindo o valor DWORD do registro ThrowUnobservedTaskExceptions = 1 no\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft. Chave NETFramework.By setting the registry DWORD value ThrowUnobservedTaskExceptions = 1 in the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework key.

ExemploExample

O exemplo a seguir mostra como habilitar o lançamento de exceções em tarefas usando um arquivo de configuração de aplicativo.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>  

ExemploExample

O exemplo a seguir demonstra como uma exceção não observada é gerada de uma tarefa.The following example demonstrates how an unobserved exception is thrown from a task. O código deve ser executado como um programa liberado para funcionar corretamente.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

Consulte tambémSee also