{"repo":"Cysharp/UniTask","free":true,"listed":false,"github":"https://github.com/Cysharp/UniTask","clone":"git clone https://github.com/Cysharp/UniTask.git","description":"Provides an efficient allocation free async/await integration for Unity.","language":"C#","stars":11120,"topics":["coroutine","csharp","task","thread","unity"],"license":"MIT","category":"dev_tool","readme_excerpt":"UniTask\n===\n[![GitHub Actions](https://github.com/Cysharp/UniTask/workflows/Build-Debug/badge.svg)](https://github.com/Cysharp/UniTask/actions) [![Releases](https://img.shields.io/github/release/Cysharp/UniTask.svg)](https://github.com/Cysharp/UniTask/releases) [![Readme_CN](https://img.shields.io/badge/UniTask-%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3-red)](https://github.com/Cysharp/UniTask/blob/master/README_CN.md)\n\nProvides an efficient allocation free async/await integration for Unity.\n\n* Struct based `UniTask<T>` and custom AsyncMethodBuilder to achieve zero allocation\n* Makes all Unity AsyncOperations and Coroutines awaitable\n* PlayerLoop based task(`UniTask.Yield`, `UniTask.Delay`, `UniTask.DelayFrame`, etc..) that enable replacing all coroutine operations\n* MonoBehaviour Message Events and uGUI Events as awaitable/async-enumerable\n* Runs completely on Unity's PlayerLoop so doesn't use threads and runs on WebGL, wasm, etc.\n* Asynchronous LINQ, with Channel and AsyncReactiveProperty\n* TaskTracker window to prevent memory leaks\n* Highly compatible behaviour with Task/ValueTask/IValueTaskSource\n\nFor technical details, see blog post: [UniTask v2 — Zero Allocation async/await for Unity, with Asynchronous LINQ\n](https://medium.com/@neuecc/unitask-v2-zero-allocation-async-await-for-unity-with-asynchronous-linq-1aa9c96aa7dd)  \nFor advanced tips, see blog post: [Extends UnityWebRequest via async decorator pattern — Advanced Techniques of UniTask](https://medium.com/@neuecc/extends-unitywebrequest-via-async-decorator-pattern-advanced-techniques-of-unitask-ceff9c5ee846)\n\n<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n## Table of Contents\n\n- [Getting started](#getting-started)\n- [Basics of UniTask and AsyncOperation](#basics-of-unitask-and-asyncoperation)\n- [Cancellation and Exception handling](#cancellation-and-exception-handling)\n- [Timeout handling](#timeout-handling)\n- [Progress](#progress)\n- [PlayerLoop](#playerloop)\n- [async void vs async UniTaskVoid](#async-void-vs-async-unitaskvoid)\n- [UniTaskTracker](#unitasktracker)\n- [External Assets](#external-assets)\n- [AsyncEnumerable and Async LINQ](#asyncenumerable-and-async-linq)\n- [Awaitable Events](#awaitable-events)\n- [Channel](#channel)\n- [vs Awaitable](#vs-awaitable)\n- [For Unit Testing](#for-unit-testing)\n- [ThreadPool limitation](#threadpool-limitation)\n- [IEnumerator.ToUniTask limitation](#ienumeratortounitask-limitation)\n- [For UnityEditor](#for-unityeditor)\n- [Compare with Standard Task API](#compare-with-standard-task-api)\n- [Pooling Configuration](#pooling-configuration)\n- [Allocation on Profiler](#allocation-on-profiler)\n- [UniTaskSynchronizationContext](#unitasksynchronizationcontext)\n- [API References](#api-references)\n- [UPM Package](#upm-package)\n  - [Install via git URL](#install-via-git-url)\n- [.NET Core](#net-core)\n- [License](#license)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\nGetting started\n---\nInstall via [UPM package](#upm-package) with git reference or asset package(`UniTask.*.*.*.unitypackage`) available in [UniTask/releases](https://github.com/Cysharp/UniTask/releases).\n\n```csharp\n// extension awaiter/methods can be used by this namespace\nusing Cysharp.Threading.Tasks;\n\n// You can return type as struct UniTask<T>(or UniTask), it is unity specialized lightweight alternative of Task<T>\n// zero allocation and fast excution for zero overhead async/await integrate with Unity\nasync UniTask<string> DemoAsync()\n{\n    // You can await Unity's AsyncObject\n    var asset = await Resources.LoadAsync<TextAsset>(\"foo\");\n    var txt = (await UnityWebRequest.Get(\"https://...\").SendWebRequest()).downloadHandler.text;\n    await SceneManager.LoadSceneAsync(\"scene2\");\n\n    // .WithCancellation enables Cancel, GetCancellationTokenOnDestroy synchornizes with lifetime of GameObject\n    // after Unity 2022.2, you can use `destroyCancellationToken` in MonoBehaviour\n    var asset2 = await Resources.LoadAsync<TextAsset>(\"bar\").WithCancellation(this.GetCancellationTokenOnDestroy());\n\n    // .ToUniTask accepts progress callback(and all options), Progress.Create is a lightweight alternative of IProgress<T>\n    var asset3 = await Resources.LoadAsync<TextAsset>(\"baz\").ToUniTask(Progress.Create<float>(x => Debug.Log(x)));\n\n    // await frame-based operation like a coroutine\n    await UniTask.DelayFrame(100); \n\n    // replacement of yield return new WaitForSeconds/WaitForSecondsRealtime\n    await UniTask.Delay(TimeSpan.FromSeconds(10), ignoreTimeScale: false);\n    \n    // yield any playerloop timing(PreUpdate, Update, LateUpdate, etc...)\n    await UniTask.Yield(PlayerLoopTiming.PreLateUpdate);\n\n    // replacement of yield return null\n    await UniTask.Yield();\n    await UniTask.NextFrame();\n\n    // replacement of WaitForEndOfFrame\n#if UNITY_2023_1_OR_NEWER\n    await UniTask.WaitForEndOfFrame();\n#else\n    // requires MonoBehaviour(CoroutineRunner))\n    await UniTask.WaitForEndOfFrame(this); // this is MonoBehaviour\n#endif\n\n    // replacement of yield return new WaitForFixedUpdate(same as UniTask.Yield(PlayerLoopTiming.FixedUpdate))\n    await UniTask.WaitForFixedUpdate();\n    \n    // replacement of yield return WaitUntil\n    await UniTask.WaitUntil(() => isActive == false);\n\n    // special helper of WaitUntil\n    await UniTask.WaitUntilValueChanged(this, x => x.isActive);\n\n    // You can await IEnumerator coroutines\n    await FooCoroutineEnumerator();\n\n    // You can await a standard task\n    await Task.Run(() => 100);\n\n    // Multithreading, run on ThreadPool under this code\n    await UniTask.SwitchToThreadPool();\n\n    /* work on ThreadPool */\n\n    // return to MainThread(same as `ObserveOnMainThread` in UniRx)\n    await UniTask.SwitchToMainThread();\n\n    // get async webrequest\n    async UniTask<string> GetTextAsync(UnityWebRequest req)\n    {\n        var op = await req.SendWebRequest();\n        return op.downloadHandler.text;\n    }\n\n    var task1 = GetTextAsync(UnityWebRequest.Get(\"http://google.com\"));\n    var task2 = GetTextAsync(UnityWebRequest.Get(\"http://bing.com\"));\n    var task3 = GetTextAsync(UnityWebRequest.Get(\"http://yahoo.com\"));\n\n    // concurrent async-wait and get results easily by tuple syntax\n    var (google, bing, yahoo) = await UniTask.WhenAll(task1, task2, task3);\n\n    // shorthand of WhenAll, tuple can await directly\n    var (google2, bing2, yahoo2) = await (task1, task2, task3);\n\n    // return async-value.(or you can use `UniTask`(no result), `UniTaskVoid`(fire and forget)).\n    return (asset as TextAsset)?.text ?? throw new InvalidOperationException(\"Asset not found\");\n}\n```\n\nBasics of UniTask and AsyncOperation\n---\nUniTask features rely on C# 7.0([task-like custom async method builder feature](https://github.com/dotnet/roslyn/blob/master/docs/features/task-types.md)) so the required Unity version is after `Unity 2018.3`, the official lowest version supported is `Unity 2018.4.13f1`.\n\nWhy is UniTask(custom task-like object) required? Because Task is too heavy and not matched to Unity threading (single-thread). UniTask does not use threads and SynchronizationContext/ExecutionContext because Unity's asynchronous object is automaticaly dispatched by Unity's engine layer. It achieves faster and lower allocation, and is completely integrated with Unity.\n\nYou can await `AsyncOperation`, `ResourceRequest`, `AssetBundleRequest`, `AssetBundleCreateRequest`, `UnityWebRequestAsyncOperation`, `AsyncGPUReadbackRequest`, `IEnumerator` and others when `using Cysharp.Threading.Tasks;`.\n\nUniTask provides three pattern of extension methods.\n\n```csharp\n* await asyncOperation;\n* .WithCancellation(CancellationToken);\n* .ToUniTask(IProgress, PlayerLoopTiming, CancellationToken);\n```\n\n`WithCancellation` is a simple version of `ToUniTask`, both return `UniTask`. For details of cancellation, see: [Cancellation and Exception handling](#cancellation-and-exception-handling) section.\n\n> Note: await directly is returned from native timing of PlayerLoop but WithCancellation and ToUniTask are returned from specified PlayerLoopTiming. For details of timing, see: [PlayerLoop](#playerloop) section.\n\n> Note: AssetBundleRequest has `asset` and `allAssets`, default await returns `asset`. If you want to get `allAssets`, you can use `AwaitForAllAssets()` method.\n\nThe type of `UniTask` can use utilities like `UniTask.WhenAll`, `UniTask.WhenAny`, `UniTask.WhenEach`. They are like `Task.WhenAll`/`Task.WhenAny` but the return type is more useful. They return value tuples so you can deconstruct each result and pass multiple types.\n\n```csharp\npublic async UniTaskVoid LoadManyAsync()\n{\n    // parallel load.\n    var (a, b, c) = await UniTask.WhenAll(\n        LoadAsSprite(\"foo\"),\n        LoadAsSprite(\"bar\"),\n        LoadAsSprite(\"baz\"));\n}\n\nasync UniTask<Sprite> LoadAsSprite(string path)\n{\n    var resource = await Resources.LoadAsync<Sprite>(path);\n    return (resource as Sprite);\n}\n```\n\nIf you want to convert a callback to UniTask, you can use `UniTaskCompletionSource<T>` which is a lightweight edition of `TaskCompletionSource<T>`. \n\n```csharp\npublic UniTask<int> WrapByUniTaskCompletionSource()\n{\n    var utcs = new UniTaskCompletionSource<int>();\n\n    // when complete, call utcs.TrySetResult();\n    // when failed, call utcs.TrySetException();\n    // when cancel, call utcs.TrySetCanceled();\n\n    return utcs.Task; //return UniTask<int>\n}\n```\n\nYou can convert Task -> UniTask: `AsUniTask`, `UniTask` -> `UniTask<AsyncUnit>`: `AsAsyncUnitUniTask`, `UniTask<T>` -> `UniTask`: `AsUniTask`. `UniTask<T>` -> `UniTask`'s conversion cost is free.\n\nIf you want to convert async to coroutine, you can use `.ToCoroutine()`, this is useful if you want to only allow using the coroutine system.\n\nUniTask can not await twice. This is a similar constraint to the [ValueTask/IValueTaskSource](https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.valuetask-1?view=netcore-3.1) ","default_branch":"master","files":513,"tree":[".config/dotnet-tools.json",".editorconfig",".github/FUNDING.yml",".github/dependabot.yaml",".github/workflows/build-debug.yaml",".github/workflows/build-docs.yaml",".github/workflows/build-release.yaml",".github/workflows/pr-harness.yaml",".github/workflows/stale.yaml",".github/workflows/toc.yaml",".gitignore","Directory.Build.props","Icon.png","LICENSE","README.md","README_CN.md","UniTask.NetCore.sln","docs/.gitignore","docs/api/.gitignore","docs/docfx.json","docs/index.md","docs/toc.yml","opensource.snk","src/UniTask.Analyzer/Properties/launchSettings.json","src/UniTask.Analyzer/UniTask.Analyzer.csproj","src/UniTask.Analyzer/UniTaskAnalyzer.cs","src/UniTask.NetCore/NetCore/AsyncEnumerableExtensions.cs","src/UniTask.NetCore/NetCore/UniTask.Delay.cs","src/UniTask.NetCore/NetCore/UniTask.Run.cs","src/UniTask.NetCore/NetCore/UniTask.Yield.cs","src/UniTask.NetCore/UniTask.NetCore.csproj","src/UniTask.NetCoreSandbox/Program.cs","src/UniTask.NetCoreSandbox/UniTask.NetCoreSandbox.csproj","src/UniTask.NetCoreTests/AsyncLazyTest.cs","src/UniTask.NetCoreTests/AsyncReactivePropertyTest.cs","src/UniTask.NetCoreTests/CancellationTokenTest.cs","src/UniTask.NetCoreTests/ChannelTest.cs","src/UniTask.NetCoreTests/CompletionSourceTest.cs","src/UniTask.NetCoreTests/DeferTest.cs","src/UniTask.NetCoreTests/Linq/Aggregate.cs","src/UniTask.NetCoreTests/Linq/AllAny.cs","src/UniTask.NetCoreTests/Linq/Concat.cs","src/UniTask.NetCoreTests/Linq/Convert.cs","src/UniTask.NetCoreTests/Linq/CreateTest.cs","src/UniTask.NetCoreTests/Linq/Factory.cs","src/UniTask.NetCoreTests/Linq/Filtering.cs","src/UniTask.NetCoreTests/Linq/FirstLast.cs","src/UniTask.NetCoreTests/Linq/Joins.cs","src/UniTask.NetCoreTests/Linq/Merge.cs","src/UniTask.NetCoreTests/Linq/Paging.cs","src/UniTask.NetCoreTests/Linq/Projection.cs","src/UniTask.NetCoreTests/Linq/PulbishTest.cs","src/UniTask.NetCoreTests/Linq/QueueTest.cs","src/UniTask.NetCoreTests/Linq/Sets.cs","src/UniTask.NetCoreTests/Linq/Sort.cs","src/UniTask.NetCoreTests/Linq/TakeInfinityTest.cs","src/UniTask.NetCoreTests/Linq/_Exception.cs","src/UniTask.NetCoreTests/TaskBuilderCases.cs","src/UniTask.NetCoreTests/TaskExtensionsTest.cs","src/UniTask.NetCoreTests/TriggerEventTest.cs","src/UniTask.NetCoreTests/UniTask.NetCoreTests.csproj","src/UniTask.NetCoreTests/UniTaskCompletionSourceTest.cs","src/UniTask.NetCoreTests/WhenEachTest.cs","src/UniTask.NetCoreTests/WithCancellationTest.cs","src/UniTask/Assets/Editor.meta","src/UniTask/Assets/Editor/EditorRunnerChecker.cs","src/UniTask/Assets/Editor/EditorRunnerChecker.cs.meta","src/UniTask/Assets/Editor/PackageExporter.cs","src/UniTask/Assets/Editor/PackageExporter.cs.meta","src/UniTask/Assets/Plugins.meta","src/UniTask/Assets/Plugins/UniTask.meta","src/UniTask/Assets/Plugins/UniTask/Editor.meta","src/UniTask/Assets/Plugins/UniTask/Editor/SplitterGUILayout.cs","src/UniTask/Assets/Plugins/UniTask/Editor/SplitterGUILayout.cs.meta","src/UniTask/Assets/Plugins/UniTask/Editor/UniTask.Editor.asmdef","src/UniTask/Assets/Plugins/UniTask/Editor/UniTask.Editor.asmdef.meta","src/UniTask/Assets/Plugins/UniTask/Editor/UniTaskTrackerTreeView.cs","src/UniTask/Assets/Plugins/UniTask/Editor/UniTaskTrackerTreeView.cs.meta","src/UniTask/Assets/Plugins/UniTask/Editor/UniTaskTrackerWindow.cs","src/UniTask/Assets/Plugins/UniTask/Editor/UniTaskTrackerWindow.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncLazy.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncLazy.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncReactiveProperty.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncReactiveProperty.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncUnit.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncUnit.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenEqualityComparer.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenEqualityComparer.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenExtensions.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenExtensions.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenSourceExtensions.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenSourceExtensions.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Channel.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Channel.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncMethodBuilderAttribute.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncMethodBuilderAttribute.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncUniTaskMethodBuilder.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncUniTaskMethodBuilder.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncUniTaskVoidMethodBuilder.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncUniTaskVoidMethodBuilder.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/StateMachineRunner.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/StateMachineRunner.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/EnumerableAsyncExtensions.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/EnumerableAsyncExtensions.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/EnumeratorAsyncExtensions.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/EnumeratorAsyncExtensions.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/ExceptionExtensions.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/ExceptionExtensions.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/External.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/AddressablesAsyncExtensions.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/AddressablesAsyncExtensions.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/UniTask.Addressables.asmdef","src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/UniTask.Addressables.asmdef.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/DOTweenAsyncExtensions.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/DOTweenAsyncExtensions.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/UniTask.DOTween.asmdef","src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/UniTask.DOTween.asmdef.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/TextMeshProAsyncExtensions.InputField.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/TextMeshProAsyncExtensions.InputField.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/TextMeshProAsyncExtensions.InputField.tt","src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/TextMeshProAsyncExtensions.InputField.tt.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/TextMeshProAsyncExtensions.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/TextMeshProAsyncExtensions.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/UniTask.TextMeshPro.asmdef","src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/UniTask.TextMeshPro.asmdef.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/IUniTaskAsyncEnumerable.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/IUniTaskAsyncEnumerable.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/IUniTaskSource.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/IUniTaskSource.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ArrayPool.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ArrayPool.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ArrayPoolUtil.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ArrayPoolUtil.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ArrayUtil.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ArrayUtil.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ContinuationQueue.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ContinuationQueue.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/DiagnosticsExtensions.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/DiagnosticsExtensions.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/Error.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/Error.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/MinimumQueue.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/MinimumQueue.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/PlayerLoopRunner.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/PlayerLoopRunner.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/PooledDelegate.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/PooledDelegate.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/RuntimeHelpersAbstraction.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/RuntimeHelpersAbstraction.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/StatePool.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/StatePool.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/TaskTracker.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/TaskTracker.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/UnityEqualityComparer.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/UnityEqualityComparer.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/UnityWebRequestExtensions.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/UnityWebRequestExtensions.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ValueStopwatch.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ValueStopwatch.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/WeakDictionary.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/WeakDictionary.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Aggregate.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Aggregate.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/All.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/All.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Any.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Any.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/AppendPrepend.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/AppendPrepend.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/AsUniTaskAsyncEnumerable.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/AsUniTaskAsyncEnumerable.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/AsyncEnumeratorBase.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/AsyncEnumeratorBase.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Average.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Average.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Average.tt","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Average.tt.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Buffer.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Buffer.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Cast.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Cast.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/CombineLatest.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/CombineLatest.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/CombineLatest.tt","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/CombineLatest.tt.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Concat.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Concat.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Contains.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Contains.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Count.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Count.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Create.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Create.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/DefaultIfEmpty.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/DefaultIfEmpty.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Distinct.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Distinct.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/DistinctUntilChanged.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/DistinctUntilChanged.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Do.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Do.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ElementAt.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ElementAt.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Empty.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Empty.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Except.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Except.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/First.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/First.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ForEach.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ForEach.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/GroupBy.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/GroupBy.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/GroupJoin.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/GroupJoin.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Intersect.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Intersect.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Join.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Join.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Last.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Last.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/LongCount.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/LongCount.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Max.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Max.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Merge.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Merge.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Min.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Min.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/MinMax.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/MinMax.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/MinMax.tt","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/MinMax.tt.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Never.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Never.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/OfType.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/OfType.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/OrderBy.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/OrderBy.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Pairwise.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Pairwise.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Publish.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Publish.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Queue.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Queue.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Range.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Range.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Repeat.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Repeat.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Return.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Return.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Reverse.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Reverse.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Select.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Select.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/SelectMany.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/SelectMany.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/SequenceEqual.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/SequenceEqual.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Single.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Single.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Skip.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Skip.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/SkipLast.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/SkipLast.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/SkipUntil.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/SkipUntil.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/SkipUntilCanceled.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/SkipUntilCanceled.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/SkipWhile.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/SkipWhile.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Subscribe.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Subscribe.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Sum.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Sum.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Sum.tt","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Sum.tt.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Take.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Take.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/TakeLast.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/TakeLast.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/TakeUntil.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/TakeUntil.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/TakeUntilCanceled.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/TakeUntilCanceled.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/TakeWhile.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/TakeWhile.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Throw.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Throw.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ToArray.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ToArray.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ToDictionary.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ToDictionary.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ToHashSet.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ToHashSet.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ToList.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ToList.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ToLookup.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ToLookup.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ToObservable.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ToObservable.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ToUniTaskAsyncEnumerable.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ToUniTaskAsyncEnumerable.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/UniTask.Linq.asmdef","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/UniTask.Linq.asmdef.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Union.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Union.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/UnityExtensions.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/UnityExtensions/EveryUpdate.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/UnityExtensions/EveryUpdate.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/UnityExtensions/EveryValueChanged.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/UnityExtensions/EveryValueChanged.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/UnityExtensions/Timer.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/UnityExtensions/Timer.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Where.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Where.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Zip.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Zip.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/MoveNextSource.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/MoveNextSource.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/PlayerLoopHelper.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/PlayerLoopHelper.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/PlayerLoopTimer.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/PlayerLoopTimer.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Progress.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Progress.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/TaskPool.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/TaskPool.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/TimeoutController.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/TimeoutController.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/TriggerEvent.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/TriggerEvent.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/AsyncAwakeTrigger.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/AsyncAwakeTrigger.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/AsyncDestroyTrigger.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/AsyncDestroyTrigger.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/AsyncStartTrigger.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/AsyncStartTrigger.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/AsyncTriggerBase.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/AsyncTriggerBase.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/AsyncTriggerExtensions.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/AsyncTriggerExtensions.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/MonoBehaviourMessagesTriggers.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/MonoBehaviourMessagesTriggers.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/MonoBehaviourMessagesTriggers.tt","src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/MonoBehaviourMessagesTriggers.tt.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.AsValueTask.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.AsValueTask.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Bridge.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Bridge.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Delay.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Delay.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Factory.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Factory.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Run.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Run.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Threading.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Threading.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WaitUntil.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WaitUntil.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WhenAll.Generated.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WhenAll.Generated.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WhenAll.Generated.tt","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WhenAll.Generated.tt.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WhenAll.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WhenAll.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WhenAny.Generated.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WhenAny.Generated.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WhenAny.Generated.tt","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WhenAny.Generated.tt.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WhenAny.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WhenAny.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WhenEach.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WhenEach.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.asmdef","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.asmdef.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskCompletionSource.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskCompletionSource.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.Shorthand.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.Shorthand.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.Shorthand.tt","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.Shorthand.tt.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskObservableExtensions.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskObservableExtensions.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskScheduler.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskScheduler.cs.meta","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskSynchronizationContext.cs","src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskSynchronizationContext.cs.meta"],"storefront":"/r/Cysharp","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/Cysharp/UniTask/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}