unity3d - 加载可寻址对象并使用 ContinueWith()
问题描述
Task.ContinueWith()
加载可寻址对象时为什么永远不会被调用是有原因的吗?
Addressables.LoadAssetAsync<Sprite>(spriteName).Task.ContinueWith(task =>
{
spriteRenderer.sprite = task.Result; // never called
});
我知道你可以使用这个Completed
事件。
Addressables.LoadAssetAsync<Sprite>(spriteName).Completed += (op =>
{
spriteRenderer.sprite = op.Result; // called
});
我只是好奇这是为什么。
解决方案
大多数 Unity Engine API 都不是线程安全的。
ContinueWith
在不同的线程上运行,因此从不同的线程分配 asprite
是SpriteRenderer
无效的。
推荐阅读
- java - 在java中制作2d游戏时显示相机渲染的帧的最佳方法是什么
- redis - 如何配置 Bulljs 以连接集群的 Elasticcache redis?
- sed - 谁能解释一下shell脚本中的这一行是做什么的?
- sql - 检查 Hive SQL 中的两个条件
- swift - 基于 Swift 服务器计时器的线程在 AWS 上的 Docker 容器重新部署中幸存下来
- python - 在 Python 中生成列表组合 - 使用规则
- asp.net-mvc - 将最小和最大日期范围设置为 DateTime 输入
- python - 如何循环遍历 pandas 数据框为每个变量运行独立的测试?
- typescript - 如何从对象键中生成枚举?
- java - 不确定如何在目标编号之前添加链接列表