UniTask 介绍/性能对比/简单使用案例

目录

1.git地址:

1.技术细节:

2.与其他方案比较

3.性能对比

2.对unity api的支持

1.WithCancellation 取消标记,可以在满足取消条件的时候,停止该异步,例如:

*超时取消

*如果有多个取消条件,可以通过CancellationTokenSource.CreateLinkedTokenSource创建取消链

IProgress:进度

PlayerLoopTiming:枚举,何时运行

5.外部拓展

案例1:点击事件

案例2:碰撞事件

案例3:数字增加绑定UI文本显示

7.其他


1.git地址

GitHub - Cysharp/UniTask: Provides an efficient allocation free async/await integration for Unity.

1.技术细节:

https://medium.com/@neuecc/unitask-v2-zero-allocation-async-await-for-unity-with-asynchronous-linq-1aa9c96aa7dd

2.与其他方案比较

3.性能对比

1顺序执行任务效率相似

2并行任务TaskUniTask执行效率更高

GC对比分别并行10任务

Task平均每次增长30M左右

UniTask第一次增长幅度Task差不多应该做了一些初始化操作第四次增长暂时不知道原因后续内存不会增长

2.对unity api的支持

可以在使用 using Cysharp.Threading.Tasks;时对

AsyncOperation,

ResourceRequest,

AssetBundleRequest,

AssetBundleCreateRequest,

UnityWebRequestAsyncOperation,

AsyncGPUReadbackRequest,

IEnumerator以及其他的异步操作直接进行 await

1.WithCancellation 取消标记,可以在满足取消条件的时候,停止该异步,例如:

var asset2 = await Resources.LoadAsync<TextAsset>("bar").WithCancellation(this.GetCancellationTokenOnDestroy());

GetCancellationTokenOnDestroy

unitask提供扩展可以获得monoBehaviourgameObjectcomponent取消令牌

async UniTaskVoid DemoAsync2()
        {
      
      
            var cts = new CancellationTokenSource();

            cancelButton.onClick.AddListener(() =>
            {
      
      
                cts.Cancel();
                Debug.Log("DemoAsync2: 取消");
            });
            await UniTask.Delay(TimeSpan.FromSeconds(3), cancellationToken: cts.Token);
            // var asset = await Resources.LoadAsync<TextAsset>("bar").WithCancellation(this.GetCancellationTokenOnDestroy());
            var asset2 = await Resources.LoadAsync<TextAsset>("bar").WithCancellation(cts.Token);
            
          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值