对于给定的线程是否可能抛出异常,它会冒泡到Main Thread
?
e.g,
序列化代码
using (Package package = Package.Open(stream, FileMode.Create, FileAccess.ReadWrite))
{
using (var xpsDoc = new XpsDocument(package, CompressionOption.Normal))
{
var rsm = new XpsSerializationManager(new XpsPackagingPolicy(xpsDoc), false);
DocumentPaginator paginator = ((IDocumentPaginatorSource) flowDocument).DocumentPaginator;
rsm.SaveAsXaml(paginator);
rsm.Commit();
}
}
SaveAsXaml
内的DocumentPaginatorSource
迭代到GetPage(int pageIndex)
' s thread
。
如果给定的SaveAsXaml
执行Exception
并且在迭代中抛出Main thread
会发生什么?它会继续迭代到SaveAsXaml
吗?
GetPage(int pageIndex)
是我无法控制的,但我知道它会尝试执行{{1}}并通过完成序列化所需的页数来完成序列化。
答案 0 :(得分:1)
没有异常永远不会自动从一个线程移动到另一个线程。某些API(如Task.Wait)充当集合点,在该集合点处发生异常的编组,但它不会自动发生。
如果某个线程抛出了一个未处理的异常,则.NET运行时的默认行为是由于未处理的异常而终止该进程。
答案 1 :(得分:0)
也许您观察到的是,当.net中未处理异常时,运行时会将整个AppDomain作为安全措施。
后台线程中的未处理异常== app崩溃。
在.net 4.5中略有改变,而任务中的未观察到的异常被忽略(可以选择以前的行为)。