我在ContentResolver resolver = getActivity().getContentResolver();
计算机上运行了一个定位.NET4
的应用,其中包含以下.NET4.6.1
:
app.config
然后我尝试运行以下内容,希望看到消息<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
的构建类型如何,都不会触发该事件。发生了什么事?
答案 0 :(得分:1)
要实现预期的行为,您可以按照上述注释进行操作,并在使用版本
时删除GC.KeepAlive(task)
或
您可以在调用task = null;
之前设置GC.Collect();
以确保收集任务。
Here你可以找到另一个相关的答案,可能会增加一些细节。