0
私は、次のapp.config
で.NET4.6.1
マシン上で実行されている.NET4
を対象にアプリを持っている:なぜTaskScheduler.UnobservedTaskExceptionがトリガーしないのですか?
<configuration>
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
</configuration>
私は、メッセージBoom!: ....
見ることを期待し、次を実行しよう:
static void Main(string[] args)
{
SetupUnobservedTaskExceptionHandling();
var task = Task.Factory.StartNew(() =>
{
Console.WriteLine("Task started");
var innerException = new InvalidOperationException("No way!");
throw new ApplicationException("Ooops!", innerException);
});
Thread.Sleep(1000);
// The task should be in faulted state before collection for the exception event to bubble up
Console.WriteLine($"Task Status: {task.Status}");
GC.Collect();
GC.WaitForPendingFinalizers();
GC.KeepAlive(task);
Console.ReadLine();
}
[HandleProcessCorruptedStateExceptions]
public static void SetupUnobservedTaskExceptionHandling()
{
Console.WriteLine("Setting up unobserved task exception handling...");
TaskScheduler.UnobservedTaskException += (sender, args) =>
{
Console.WriteLine("Boooom!: {0}", args);
};
Console.WriteLine("Set up unobserved task exception handling.");
}
をしかし、イベントがありますビルドタイプDebug
またはRelease
に関係なく、トリガーされません。何が起こっている?期待される動作をachievetheする
GC.KeepAlive(タスク);を削除してください。 – PetSerAl
Debugはデバッグ可能性のためにローカル変数のライフタイムを拡張するため、リリースも使用する必要があります。 – usr