Litask
.Net/Unity lightweight allocation free Task-like object
com.ms.litask 
Install via UPM
Add to Unity Package Manager using this URL
https://www.pkglnk.dev/litask.git README Markdown
Copy this to your project's README.md
## Installation
Add **Litask** to your Unity project via Package Manager:
1. Open **Window > Package Manager**
2. Click **+** > **Add package from git URL**
3. Enter:
```
https://www.pkglnk.dev/litask.git
```
[](https://www.pkglnk.dev/pkg/litask)Used By (1)
README
LitTask
C# Task的轻量无GC Alloc版本实现。 LitTask是ValueType实现,同时内部对非值类型也采用了对象池管理。
优势:
- 无GC Alloc (在Release编译模式下).
- 性能好.
缺点:
- 线程不安全.
- 一个LitTask只能被await一次.
- 最好不要对LitTask进行引用,而应该在返回的时候马上await或者Forget掉
Install
For unity package manager, add:
"com.ms.litask":"https://github.com/wlgys8/LitTask.git"
to Package/manifest.json
Usage
async function
async LitTask RunAsync(){ await new SomeAwaitableObject(); } async LitTask<int> GetValueAsync(){ await new SomeAwaitableObject(); return 100; }LitTask.WhenAll(params LitTask[] tasks) => LitTask
同时启动所有任务,并等待所有任务完成。LitTask.WhenAny(params LitTask[] tasks) => LitTask<WhenAnyResult>
同时启动所有任务,只要有一个任务结束,就返回。
FAQ
在Unity Editor中使用Profiler分析发现有GC Alloc?
这是因为在Debug编译模式下,async/await编译出来的状态机是class类型的. Release编译模式下会切换成struct类型,就无alloc了。 Unity2020已经支持了在编辑器中切换release/debug编译模式。可以测试看看。
No comments yet. Be the first!