Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Especifica se as exceções de tarefa sem tratamento devem encerrar um processo em execução.
<configuração>
<Runtime>
<ThrowUnobservedTaskExceptions>
Sintaxe
<ThrowUnobservedTaskExceptions
enabled="true|false"/>
Atributos e elementos
As seções a seguir descrevem atributos, elementos filho e elementos pai.
Attributes
| Attribute | Description |
|---|---|
enabled |
Atributo necessário. Especifica se exceções de tarefa sem tratamento devem encerrar o processo em execução. |
Atributo habilitado
| Value | Description |
|---|---|
false |
Não encerra o processo em execução para uma exceção de tarefa sem tratamento. Esse é o padrão. |
true |
Encerra o processo em execução para uma exceção de tarefa sem tratamento. |
Elementos filho
Nenhum.
Elementos pai
| Elemento | Description |
|---|---|
configuration |
O elemento raiz em cada arquivo de configuração usado pelos aplicativos do Common Language Runtime e .NET Framework. |
runtime |
Contém informações sobre opções de inicialização do runtime. |
Observações
Se uma exceção associada a um Task não tiver sido observada, não Wait haverá operação, o pai não será anexado e a Task.Exception propriedade não foi lida, a exceção da tarefa será considerada não observada.
No .NET Framework 4, por padrão, se uma Task exceção não observada for o lixo coletado, o finalizador gerará uma exceção e encerrará o processo. O encerramento do processo é determinado pelo tempo de coleta e finalização de lixo.
Para facilitar a gravação de código assíncrono com base em tarefas, o .NET Framework 4.5 altera esse comportamento padrão para exceções não observadas. Exceções não observadas ainda fazem com que o UnobservedTaskException evento seja acionado, mas, por padrão, o processo não é encerrado. Em vez disso, a exceção é ignorada depois que o evento é gerado, independentemente de um manipulador de eventos observar a exceção.
No .NET Framework 4.5, você pode usar o <ThrowUnobservedTaskExceptions> elemento em um arquivo de configuração de aplicativo para habilitar o comportamento do .NET Framework 4 de gerar uma exceção.
Você também pode especificar o comportamento de exceção de uma das seguintes maneiras:
Definindo a variável
COMPlus_ThrowUnobservedTaskExceptionsde ambiente (set COMPlus_ThrowUnobservedTaskExceptions=1).Definindo o valor DWORD do Registro ThrowUnobservedTaskExceptions = 1 na chave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework.
Exemplo 1
O exemplo a seguir mostra como habilitar o lançamento de exceções em tarefas usando um arquivo de configuração de aplicativo.
<configuration>
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
</configuration>
Exemplo 2
O exemplo a seguir demonstra como uma exceção não observada é gerada de uma tarefa. O código deve ser executado como um programa liberado para funcionar corretamente.
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