我们有一个有趣的问题,我想知道是否有人能够阐明。我们目前看到警告:"Method never reaches end or 'return' statement"
对事件处理程序委托回调很奇怪。
考虑以下代码(您可以忽略SCB_
函数,它们与问题无关):
public static class NativeBridge
{
private static UnityEventQueue _eventQueue;
private static bool _initialized;
public static void Init()
{
if (_initialized)
{
return;
}
_initialized = true;
SCB_SDKInit();
_eventQueue = UnityEventQueue.Instance;
_eventQueue.AppExiting += EventQueue_AppExiting;
SCB_registerReceivedSistrCallback(SistrReceived);
}
//Lots of other irrelevant code
private static void EventQueue_AppExiting(object sender, EventArgs e)
{
SCB_registerReceivedSistrCallback(null);
_eventQueue.AppExiting -= EventQueue_AppExiting;
SCB_SDKFinal();
_initialized = false;
}
}
警告在EventQueue_AppExiting
上。这是奇怪的部分。如果我注释掉注销_eventQueue.AppExiting -= EventQueue_AppExiting
,警告就会消失。
我们尝试了各种各样的解决方案"因为似乎就像编译器的不可达性传递中的错误一样:
event
中的UnityEngineQueue
成为静态,并进行相应调整void
SCB_
功能的调用以进行完整性检查Spaghetti at the wall
解决方案以上所有内容都没有改变编译器的行为。我们最好的猜测是编译器检测到注销,认为,因为代理被删除,它无法在运行时完成执行,即使我相信堆栈即使在删除后也必须继续执行,因为调用已经开始了。
这似乎不会对应用程序的执行产生任何负面影响,但由于事件的调用条件(应用程序退出)的性质,很难调试。
编制者可以看到什么和/或我们可能做错了什么?
P.S.
对于一些上下文,该类是static
,因为它充当了extern
与具有类似API的各种平台特定库的桥梁。但这个事实与这个问题没什么关系,只是为了平息“EWWWW静态等级”。情绪。
答案 0 :(得分:0)
我认为这是一个在此链接上报告的错误:
https://bugzilla.xamarin.com/show_bug.cgi?id=42819
在这里
https://bugzilla.xamarin.com/show_bug.cgi?id=41798
他们在6.2.0.259版本中报告已修复