Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Especifica se exceções de tarefa não tratadas devem terminar um processo em execução.
<configuração>
<tempo de execução>
<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 obrigatório. Especifica se exceções de tarefas não tratadas devem terminar o processo em execução. |
Atributo ativado
| Valor | Description |
|---|---|
false |
Não termina o processo em execução por uma exceção de tarefa não tratada. Este é o padrão. |
true |
Termina o processo em execução por uma exceção de tarefa não tratada. |
Elementos Subordinados
Nenhum.
Elementos Principais
| Elemento | Description |
|---|---|
configuration |
O elemento raiz em cada arquivo de configuração usado pelo Common Language Runtime e aplicativos .NET Framework. |
runtime |
Contém informações sobre opções de inicialização de tempo de execução. |
Observações
Se uma exceção associada a Task não tiver sido observada, não Wait houver operação, o pai não estiver associado e a Task.Exception propriedade não for lida, a exceção de tarefa é considerada não observada.
No .NET Framework 4, por defeito, se um Task que tem uma exceção não observada for recolhido pelo lixo, o finalizador lança uma exceção e termina o processo. A terminação do processo é determinada pelo momento da recolha e finalização do lixo.
Para facilitar aos programadores a escrita de código assíncrono baseado em tarefas, o .NET Framework 4.5 altera este comportamento padrão para exceções não observadas. Exceções não observadas continuam a fazer com que o UnobservedTaskException evento seja levantado, mas por defeito, o processo não termina. Em vez disso, a exceção é ignorada após o evento ser levantado, independentemente de um handler de eventos observar ou não a exceção.
No .NET Framework 4.5, pode usar o <ThrowUnobservedTaskExceptions> elemento num ficheiro de configuração de aplicação para ativar o comportamento do .NET Framework 4 ao lançar uma exceção.
Também pode especificar o comportamento de exceção de uma das seguintes formas:
Definindo a variável
COMPlus_ThrowUnobservedTaskExceptionsambiente (set COMPlus_ThrowUnobservedTaskExceptions=1).Ao definir o valor DWORD do registo ThrowUnobservedTaskExceptions = 1 na tecla HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework.
Exemplo 1
O exemplo seguinte mostra como ativar o lançamento de exceções em tarefas usando um ficheiro de configuração de aplicação.
<configuration>
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
</configuration>
Exemplo 2
O exemplo seguinte demonstra como uma exceção não observada é lançada de uma tarefa. O código deve ser executado como um programa lançado 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