Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Указывает, должны ли необработанные исключения задач завершить выполняющийся процесс.
<configuration>
<runtime>
<ThrowUnobservedTaskExceptions>
Синтаксис
<ThrowUnobservedTaskExceptions
enabled="true|false"/>
Атрибуты и элементы
В следующих разделах описаны атрибуты, дочерние и родительские элементы.
Attributes
| Свойство | Description |
|---|---|
enabled |
Обязательный атрибут. Указывает, должны ли необработанные исключения задач завершить выполняющийся процесс. |
Атрибут с поддержкой
| Ценность | Description |
|---|---|
false |
Не завершает выполняющийся процесс для необработанного исключения задачи. Это значение по умолчанию. |
true |
Завершает выполняющийся процесс для необработанного исключения задачи. |
Дочерние элементы
Нет.
Родительские элементы
| Элемент | Description |
|---|---|
configuration |
Корневой элемент в любом файле конфигурации, используемом средой CLR и приложениями .NET Framework. |
runtime |
Содержит сведения о параметрах инициализации среды выполнения. |
Замечания
Если исключение, связанное с Task невидимым, отсутствует операция, Wait родительский элемент не подключен, а Task.Exception свойство не считывается исключение задачи, считается незаслуженным.
По умолчанию в .NET Framework 4, если Task в сборке мусора есть исключение без необработанных значений, метод завершения создает исключение и завершает процесс. Завершение процесса определяется временем сборки и завершения сборки мусора.
Чтобы упростить для разработчиков написание асинхронного кода на основе задач, платформа .NET Framework 4.5 изменяет это поведение по умолчанию для незаслуженных исключений. Незаслуженные исключения по-прежнему вызывают UnobservedTaskException событие, но по умолчанию процесс не завершается. Вместо этого исключение игнорируется после того, как событие вызывается, независимо от того, наблюдает ли обработчик событий исключение.
В .NET Framework 4.5 можно использовать <ThrowUnobservedTaskExceptions> элемент в файле конфигурации приложения, чтобы включить поведение .NET Framework 4 для создания исключения.
Можно также указать поведение исключения одним из следующих способов:
Задав переменную
COMPlus_ThrowUnobservedTaskExceptionsсреды (set COMPlus_ThrowUnobservedTaskExceptions=1).Задав значение DWORD реестра ThrowUnobservedTaskExceptions = 1 в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework.
Пример 1
В следующем примере показано, как включить исключение в задачах с помощью файла конфигурации приложения.
<configuration>
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
</configuration>
Пример 2
В следующем примере показано, как исключение, не заслуженное, создается из задачи. Для правильной работы код должен выполняться как выпущенная программа.
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