unity的async api和c#的thread有什么区别
unity3d吧
全部回复
仅看楼主
level 2
像Unity的Async函数和普通的异步函数有什么区别? 会在什么时候调用?内部使用的是协程吗?
例如我使用Addressables.LoadAssetsAsync,假如我在Update里的第一帧调用了一次,这个时候它会怎么加载?
假如我第三帧又调用了一次 但是这个时候资源还没加载完成 我就添加了一个Completed监听函数 如果在添加的过程中 资源加载好了 不会造成代码逻辑上的错误 吗
例如我进入If(AsyncOperationHandler.isDone)判断后的语句块时 它还没有完成 但是我判断完之后 它加载完成了 这样不会出问题吗?
所以Unity Async函数实现的底层逻辑是什么 我觉得只有协程可以避免这种问题吧所以Unity的Async和它的生命周期有什么关系?
2024年06月12日 05点06分 1
level 6
他这个异步只是不会阻塞主线程,同步就是直接那一句执行完就加载好,会阻塞主线程,具体加载逻辑肯定是黑盒的,LoadAsync就是把一帧加载完的东西分多帧去加载,你只要调用LoadAsync就会开始加载,大概应该是在每一帧末尾(我也不确定,反正肯定是有个固定的周期节点),每帧加载快慢和ProjectSetting里的一个配置有关系,可以配置加载速率,不过肯定有上限,Addressable没用过,不过AsyncOperationHandler.isDone这个只要为true应该就是肯定加载好了,他函数内部肯定保存的引用加载完才修改的状态。
2024年06月12日 06点06分 2
那这玩意本质还是跟unity的协程一样啊[笑尿]跟划分时间片一样 不是说unity有自动的线程管理吗[困成狗]我是挺好奇这玩意怎么判断一帧要加载多少东西的
2024年06月12日 06点06分
@冷枫狗头保住💢 差不多吧,本身Unity基本上加载都必须要主线程干,一直都这样,多线程渲染倒是有
2024年06月12日 06点06分
现在有Jobsystem,但是加载好像还是要在主线程里,具体一帧加载多大,和你的硬盘的读写能力有关,还有个backgroundLoadingPriority的设置有关(这个不太确定,我没用过Addressable,但是和读写加载有关的应该是一样的)
2024年06月12日 06点06分
@永远萌呆瞎 感谢大佬[乖]之前照着人家棋牌游戏视频做服务器demo 给异步协同整的看见async就想一下会不会蹦
2024年06月12日 06点06分
1