为什么catch块永远不会在设备上执行

本文关键字:执行 catch 永远 为什么 | 更新日期: 2023-09-27 17:49:27

考虑以下代码:

Task.Factory.StartNew (() => {
    try {
        Console.WriteLine ("Throwing");
        throw new Exception ();
    } catch {
        Console.WriteLine ("Gotcha!");
    }
});

在iOS模拟器上,它按预期打印ThrowingGotcha!
但是,在为设备编译时,只打印Throwing而不打印Gotcha!

为什么会发生这种情况?
我用的是MonoTouch 6.0.8。我也可以在6.0.6上复制它。

我在这里提供了一个示例项目,您可以尝试在设备上运行它。
(别管名字了——我是在调查另一起崩溃时发现的)

为什么catch块永远不会在设备上执行

我发现只有在启用LLVM时才会发生这种情况。
也许这是一个bug,所以我会报告给Xamarin。

添加

有趣的是,

BeginInvokeOnMainThread (() => {
    new UIAlertView ("Gotta catch 'em all!", "", null, "OK", null).Show ();
});

Console.WriteLine调用帮助之后-我同时看到警报和日志条目。

这是我的示例项目。

可能是一个愚蠢的问题,但是是否满足了需要catch命令的条件?

如果是这样,应用程序可能会在返回"Gotcha"和iOS命令接管之前中断。

我相信iOS会监听你的命令/应用程序是否以及何时中断,因为默认函数会开始处理这个问题。类似于dealloc命令