Ich habe eine App .NET4
läuft auf einer .NET4.6.1
Maschine ist mit folgenden app.config
Targeting:Warum wird die TaskScheduler.UnobservedTaskException nicht ausgelöst?
<configuration>
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
</configuration>
ich dann versuchen Sie folgendes erwarten ausführen, um die Nachricht Boom!: ....
zu sehen:
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.");
}
Aber das Ereignis nie ausgelöst unabhängig von einem Build-Typ Debug
oder Release
. Was ist los?
Entfernen Sie das 'GC.KeepAlive (Task);' – PetSerAl
Außerdem muss Release verwenden, da Debug lokale var Lebensdauern für Debuggability erweitert. – usr