首页 > 解决方案 > 加载可寻址对象并使用 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
});

我只是好奇这是为什么。

标签: unity3d

解决方案


大多数 Unity Engine API 都不是线程安全的。

ContinueWith在不同的线程上运行,因此从不同的线程分配 aspriteSpriteRenderer无效的。


推荐阅读