Closed ChocolSauerkraut closed 2 years ago
将ETTask全放入到热更程序集种,使用如下代码测试,工作异常
public static void Start() { AsyncMethod().Coroutine(); } static async ETTask AsyncMethod() { Debug.Log("Begin"); await ETTask.CompletedTask; Debug.Log("End"); }
注释掉Coroutine方法中的InnerCoroutine调用后可正常工作
[DebuggerHidden] private async ETVoid InnerCoroutine() { await this; } [DebuggerHidden] public void Coroutine() { InnerCoroutine().Coroutine(); }
经打断点调试发现是libil2cpp\huatuo\transform.cpp 3895行的断言引起的,此时size为24,GetTypeValueSize得到的size为8 初步怀疑是是由C#方法InnerCoroutine引起的该方法await的是一个ETTask返回的是一个async ETvoid
PopStack(); PushStackByType(&objKlass->byval_arg); IL2CPP_ASSERT(size == GetTypeValueSize(&objKlass->byval_arg)); InsertMemoryBarrier(); ResetPrefixFlags(); ip += 5; continue;
ETTask的源码文件地址https://github.com/egametang/ET/tree/master/Unity/Assets/ThirdParty/ETTask 将整个ETTask文件夹放入热更程序集复制上述代码RefTypes中加入Queue泛型(印象中示例工程没加Queue)即可测试。
确认bug。已修复,稍后提交。
将ETTask全放入到热更程序集种,使用如下代码测试,工作异常
注释掉Coroutine方法中的InnerCoroutine调用后可正常工作
经打断点调试发现是libil2cpp\huatuo\transform.cpp 3895行的断言引起的,此时size为24,GetTypeValueSize得到的size为8 初步怀疑是是由C#方法InnerCoroutine引起的该方法await的是一个ETTask返回的是一个async ETvoid
ETTask的源码文件地址https://github.com/egametang/ET/tree/master/Unity/Assets/ThirdParty/ETTask 将整个ETTask文件夹放入热更程序集复制上述代码RefTypes中加入Queue泛型(印象中示例工程没加Queue)即可测试。