<ThrowUnobservedTaskExceptions > 요소<ThrowUnobservedTaskExceptions> Element

작업 예외가 처리되지 않으면 실행 중인 프로세스를 종료할지를 지정합니다.Specifies whether unhandled task exceptions should terminate a running process.

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

구문Syntax

<ThrowUnobservedTaskExceptions  
   enabled="true|false"/>  

특성 및 요소Attributes and Elements

다음 섹션에서는 특성, 자식 요소 및 부모 요소에 대해 설명합니다.The following sections describe attributes, child elements, and parent elements.

특성Attributes

특성Attribute 설명Description
enabled 필수 특성입니다.Required attribute.

처리 되지 않은 태스크 예외가 실행 중인 프로세스를 종료할지 여부를 지정 합니다.Specifies whether unhandled task exceptions should terminate the running process.

enabled 특성enabled Attribute

Value 설명Description
false 처리 되지 않은 작업 예외에 대 한 실행 중인 프로세스를 종료 하지 않습니다.Does not terminate the running process for an unhandled task exception. 기본값입니다.This is the default.
true 처리 되지 않은 작업 예외에 대 한 실행 중인 프로세스를 종료 합니다.Terminates the running process for an unhandled task exception.

자식 요소Child Elements

없음.None.

부모 요소Parent Elements

요소Element 설명Description
configuration 공용 언어 런타임 및 .NET Framework 애플리케이션에서 사용하는 모든 구성 파일의 루트 요소입니다.The root element in every configuration file used by the common language runtime and .NET Framework applications.
runtime 런타임 초기화 옵션에 대한 정보를 포함합니다.Contains information about runtime initialization options.

주의Remarks

Task와 연결 된 예외가 관찰 되지 않은 경우 Wait 작업이 없으며, 부모는 연결 되지 않으며 Task.Exception 속성을 읽지 않은 것으로 간주 됩니다.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.

.NET Framework 4에서는 기본적으로 관찰 되지 않은 예외가 있는 Task 가비지 수집 되는 경우 종료자는 예외를 throw 하 고 프로세스를 종료 합니다.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. 프로세스 종료는 가비지 수집 및 종료 시간에 따라 결정 됩니다.The termination of the process is determined by the timing of garbage collection and finalization.

개발자가 작업을 기반으로 비동기 코드를 보다 쉽게 작성할 수 있도록 .NET Framework 4.5은 관찰 되지 않은 예외에 대 한이 기본 동작을 변경 합니다.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. 관찰 되지 않은 예외는 여전히 UnobservedTaskException 이벤트를 발생 시킬 수 있지만 기본적으로 프로세스가 종료 되지 않습니다.Unobserved exceptions still cause the UnobservedTaskException event to be raised, but by default, the process does not terminate. 대신, 이벤트 처리기가 예외를 준수 하는지 여부에 관계 없이 이벤트가 발생 한 후 예외가 무시 됩니다.Instead, the exception is ignored after the event is raised, regardless of whether an event handler observes the exception.

.NET Framework 4.5에서는 응용 프로그램 구성 파일에서 <ThrowUnobservedTaskExceptions > 요소 를 사용 하 여 예외를 throw 하는 .NET Framework 4 동작을 사용 하도록 설정할 수 있습니다.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.

다음 방법 중 하나로 예외 동작을 지정할 수도 있습니다.You can also specify the exception behavior in one of the following ways:

  • 환경 변수 COMPlus_ThrowUnobservedTaskExceptions (set COMPlus_ThrowUnobservedTaskExceptions=1)를 설정 합니다.By setting the environment variable COMPlus_ThrowUnobservedTaskExceptions (set COMPlus_ThrowUnobservedTaskExceptions=1).

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\에서 레지스트리 DWORD 값 ThrowUnobservedTaskExceptions = 1을 설정 합니다. NETFramework 키입니다.By setting the registry DWORD value ThrowUnobservedTaskExceptions = 1 in the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework key.

예제Example

다음 예제에서는 응용 프로그램 구성 파일을 사용 하 여 작업에서 예외를 throw 하도록 설정 하는 방법을 보여 줍니다.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>  

예제Example

다음 예제에서는 작업에서 관찰 되지 않은 예외가 throw 되는 방법을 보여 줍니다.The following example demonstrates how an unobserved exception is thrown from a task. 제대로 작동 하려면 코드가 릴리스 된 프로그램으로 실행 되어야 합니다.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

참조See also