Full Code of Cysharp/UniTask for AI

master a9e27c03d411 cached
511 files
3.1 MB
852.5k tokens
5845 symbols
1 requests
Download .txt
Showing preview only (3,396K chars total). Download the full file or copy to clipboard to get everything.
Repository: Cysharp/UniTask
Branch: master
Commit: a9e27c03d411
Files: 511
Total size: 3.1 MB

Directory structure:
gitextract_puolhiam/

├── .config/
│   └── dotnet-tools.json
├── .editorconfig
├── .github/
│   ├── FUNDING.yml
│   ├── dependabot.yaml
│   └── workflows/
│       ├── build-debug.yaml
│       ├── build-docs.yaml
│       ├── build-release.yaml
│       ├── prevent-github-change.yaml
│       ├── stale.yaml
│       └── toc.yaml
├── .gitignore
├── Directory.Build.props
├── LICENSE
├── README.md
├── README_CN.md
├── UniTask.NetCore.sln
├── docs/
│   ├── .gitignore
│   ├── api/
│   │   └── .gitignore
│   ├── docfx.json
│   ├── index.md
│   └── toc.yml
├── opensource.snk
└── src/
    ├── UniTask/
    │   ├── Assets/
    │   │   ├── Editor/
    │   │   │   ├── EditorRunnerChecker.cs
    │   │   │   ├── EditorRunnerChecker.cs.meta
    │   │   │   ├── PackageExporter.cs
    │   │   │   └── PackageExporter.cs.meta
    │   │   ├── Editor.meta
    │   │   ├── Plugins/
    │   │   │   ├── UniTask/
    │   │   │   │   ├── Editor/
    │   │   │   │   │   ├── SplitterGUILayout.cs
    │   │   │   │   │   ├── SplitterGUILayout.cs.meta
    │   │   │   │   │   ├── UniTask.Editor.asmdef
    │   │   │   │   │   ├── UniTask.Editor.asmdef.meta
    │   │   │   │   │   ├── UniTaskTrackerTreeView.cs
    │   │   │   │   │   ├── UniTaskTrackerTreeView.cs.meta
    │   │   │   │   │   ├── UniTaskTrackerWindow.cs
    │   │   │   │   │   └── UniTaskTrackerWindow.cs.meta
    │   │   │   │   ├── Editor.meta
    │   │   │   │   ├── Runtime/
    │   │   │   │   │   ├── AsyncLazy.cs
    │   │   │   │   │   ├── AsyncLazy.cs.meta
    │   │   │   │   │   ├── AsyncReactiveProperty.cs
    │   │   │   │   │   ├── AsyncReactiveProperty.cs.meta
    │   │   │   │   │   ├── AsyncUnit.cs
    │   │   │   │   │   ├── AsyncUnit.cs.meta
    │   │   │   │   │   ├── CancellationTokenEqualityComparer.cs
    │   │   │   │   │   ├── CancellationTokenEqualityComparer.cs.meta
    │   │   │   │   │   ├── CancellationTokenExtensions.cs
    │   │   │   │   │   ├── CancellationTokenExtensions.cs.meta
    │   │   │   │   │   ├── CancellationTokenSourceExtensions.cs
    │   │   │   │   │   ├── CancellationTokenSourceExtensions.cs.meta
    │   │   │   │   │   ├── Channel.cs
    │   │   │   │   │   ├── Channel.cs.meta
    │   │   │   │   │   ├── CompilerServices/
    │   │   │   │   │   │   ├── AsyncMethodBuilderAttribute.cs
    │   │   │   │   │   │   ├── AsyncMethodBuilderAttribute.cs.meta
    │   │   │   │   │   │   ├── AsyncUniTaskMethodBuilder.cs
    │   │   │   │   │   │   ├── AsyncUniTaskMethodBuilder.cs.meta
    │   │   │   │   │   │   ├── AsyncUniTaskVoidMethodBuilder.cs
    │   │   │   │   │   │   ├── AsyncUniTaskVoidMethodBuilder.cs.meta
    │   │   │   │   │   │   ├── StateMachineRunner.cs
    │   │   │   │   │   │   └── StateMachineRunner.cs.meta
    │   │   │   │   │   ├── CompilerServices.meta
    │   │   │   │   │   ├── EnumerableAsyncExtensions.cs
    │   │   │   │   │   ├── EnumerableAsyncExtensions.cs.meta
    │   │   │   │   │   ├── EnumeratorAsyncExtensions.cs
    │   │   │   │   │   ├── EnumeratorAsyncExtensions.cs.meta
    │   │   │   │   │   ├── ExceptionExtensions.cs
    │   │   │   │   │   ├── ExceptionExtensions.cs.meta
    │   │   │   │   │   ├── External/
    │   │   │   │   │   │   ├── Addressables/
    │   │   │   │   │   │   │   ├── AddressablesAsyncExtensions.cs
    │   │   │   │   │   │   │   ├── AddressablesAsyncExtensions.cs.meta
    │   │   │   │   │   │   │   ├── UniTask.Addressables.asmdef
    │   │   │   │   │   │   │   └── UniTask.Addressables.asmdef.meta
    │   │   │   │   │   │   ├── Addressables.meta
    │   │   │   │   │   │   ├── DOTween/
    │   │   │   │   │   │   │   ├── DOTweenAsyncExtensions.cs
    │   │   │   │   │   │   │   ├── DOTweenAsyncExtensions.cs.meta
    │   │   │   │   │   │   │   ├── UniTask.DOTween.asmdef
    │   │   │   │   │   │   │   └── UniTask.DOTween.asmdef.meta
    │   │   │   │   │   │   ├── DOTween.meta
    │   │   │   │   │   │   ├── TextMeshPro/
    │   │   │   │   │   │   │   ├── TextMeshProAsyncExtensions.InputField.cs
    │   │   │   │   │   │   │   ├── TextMeshProAsyncExtensions.InputField.cs.meta
    │   │   │   │   │   │   │   ├── TextMeshProAsyncExtensions.InputField.tt
    │   │   │   │   │   │   │   ├── TextMeshProAsyncExtensions.InputField.tt.meta
    │   │   │   │   │   │   │   ├── TextMeshProAsyncExtensions.cs
    │   │   │   │   │   │   │   ├── TextMeshProAsyncExtensions.cs.meta
    │   │   │   │   │   │   │   ├── UniTask.TextMeshPro.asmdef
    │   │   │   │   │   │   │   └── UniTask.TextMeshPro.asmdef.meta
    │   │   │   │   │   │   └── TextMeshPro.meta
    │   │   │   │   │   ├── External.meta
    │   │   │   │   │   ├── IUniTaskAsyncEnumerable.cs
    │   │   │   │   │   ├── IUniTaskAsyncEnumerable.cs.meta
    │   │   │   │   │   ├── IUniTaskSource.cs
    │   │   │   │   │   ├── IUniTaskSource.cs.meta
    │   │   │   │   │   ├── Internal/
    │   │   │   │   │   │   ├── ArrayPool.cs
    │   │   │   │   │   │   ├── ArrayPool.cs.meta
    │   │   │   │   │   │   ├── ArrayPoolUtil.cs
    │   │   │   │   │   │   ├── ArrayPoolUtil.cs.meta
    │   │   │   │   │   │   ├── ArrayUtil.cs
    │   │   │   │   │   │   ├── ArrayUtil.cs.meta
    │   │   │   │   │   │   ├── ContinuationQueue.cs
    │   │   │   │   │   │   ├── ContinuationQueue.cs.meta
    │   │   │   │   │   │   ├── DiagnosticsExtensions.cs
    │   │   │   │   │   │   ├── DiagnosticsExtensions.cs.meta
    │   │   │   │   │   │   ├── Error.cs
    │   │   │   │   │   │   ├── Error.cs.meta
    │   │   │   │   │   │   ├── MinimumQueue.cs
    │   │   │   │   │   │   ├── MinimumQueue.cs.meta
    │   │   │   │   │   │   ├── PlayerLoopRunner.cs
    │   │   │   │   │   │   ├── PlayerLoopRunner.cs.meta
    │   │   │   │   │   │   ├── PooledDelegate.cs
    │   │   │   │   │   │   ├── PooledDelegate.cs.meta
    │   │   │   │   │   │   ├── RuntimeHelpersAbstraction.cs
    │   │   │   │   │   │   ├── RuntimeHelpersAbstraction.cs.meta
    │   │   │   │   │   │   ├── StatePool.cs
    │   │   │   │   │   │   ├── StatePool.cs.meta
    │   │   │   │   │   │   ├── TaskTracker.cs
    │   │   │   │   │   │   ├── TaskTracker.cs.meta
    │   │   │   │   │   │   ├── UnityEqualityComparer.cs
    │   │   │   │   │   │   ├── UnityEqualityComparer.cs.meta
    │   │   │   │   │   │   ├── UnityWebRequestExtensions.cs
    │   │   │   │   │   │   ├── UnityWebRequestExtensions.cs.meta
    │   │   │   │   │   │   ├── ValueStopwatch.cs
    │   │   │   │   │   │   ├── ValueStopwatch.cs.meta
    │   │   │   │   │   │   ├── WeakDictionary.cs
    │   │   │   │   │   │   └── WeakDictionary.cs.meta
    │   │   │   │   │   ├── Internal.meta
    │   │   │   │   │   ├── Linq/
    │   │   │   │   │   │   ├── Aggregate.cs
    │   │   │   │   │   │   ├── Aggregate.cs.meta
    │   │   │   │   │   │   ├── All.cs
    │   │   │   │   │   │   ├── All.cs.meta
    │   │   │   │   │   │   ├── Any.cs
    │   │   │   │   │   │   ├── Any.cs.meta
    │   │   │   │   │   │   ├── AppendPrepend.cs
    │   │   │   │   │   │   ├── AppendPrepend.cs.meta
    │   │   │   │   │   │   ├── AsUniTaskAsyncEnumerable.cs
    │   │   │   │   │   │   ├── AsUniTaskAsyncEnumerable.cs.meta
    │   │   │   │   │   │   ├── AsyncEnumeratorBase.cs
    │   │   │   │   │   │   ├── AsyncEnumeratorBase.cs.meta
    │   │   │   │   │   │   ├── Average.cs
    │   │   │   │   │   │   ├── Average.cs.meta
    │   │   │   │   │   │   ├── Average.tt
    │   │   │   │   │   │   ├── Average.tt.meta
    │   │   │   │   │   │   ├── Buffer.cs
    │   │   │   │   │   │   ├── Buffer.cs.meta
    │   │   │   │   │   │   ├── Cast.cs
    │   │   │   │   │   │   ├── Cast.cs.meta
    │   │   │   │   │   │   ├── CombineLatest.cs
    │   │   │   │   │   │   ├── CombineLatest.cs.meta
    │   │   │   │   │   │   ├── CombineLatest.tt
    │   │   │   │   │   │   ├── CombineLatest.tt.meta
    │   │   │   │   │   │   ├── Concat.cs
    │   │   │   │   │   │   ├── Concat.cs.meta
    │   │   │   │   │   │   ├── Contains.cs
    │   │   │   │   │   │   ├── Contains.cs.meta
    │   │   │   │   │   │   ├── Count.cs
    │   │   │   │   │   │   ├── Count.cs.meta
    │   │   │   │   │   │   ├── Create.cs
    │   │   │   │   │   │   ├── Create.cs.meta
    │   │   │   │   │   │   ├── DefaultIfEmpty.cs
    │   │   │   │   │   │   ├── DefaultIfEmpty.cs.meta
    │   │   │   │   │   │   ├── Distinct.cs
    │   │   │   │   │   │   ├── Distinct.cs.meta
    │   │   │   │   │   │   ├── DistinctUntilChanged.cs
    │   │   │   │   │   │   ├── DistinctUntilChanged.cs.meta
    │   │   │   │   │   │   ├── Do.cs
    │   │   │   │   │   │   ├── Do.cs.meta
    │   │   │   │   │   │   ├── ElementAt.cs
    │   │   │   │   │   │   ├── ElementAt.cs.meta
    │   │   │   │   │   │   ├── Empty.cs
    │   │   │   │   │   │   ├── Empty.cs.meta
    │   │   │   │   │   │   ├── Except.cs
    │   │   │   │   │   │   ├── Except.cs.meta
    │   │   │   │   │   │   ├── First.cs
    │   │   │   │   │   │   ├── First.cs.meta
    │   │   │   │   │   │   ├── ForEach.cs
    │   │   │   │   │   │   ├── ForEach.cs.meta
    │   │   │   │   │   │   ├── GroupBy.cs
    │   │   │   │   │   │   ├── GroupBy.cs.meta
    │   │   │   │   │   │   ├── GroupJoin.cs
    │   │   │   │   │   │   ├── GroupJoin.cs.meta
    │   │   │   │   │   │   ├── Intersect.cs
    │   │   │   │   │   │   ├── Intersect.cs.meta
    │   │   │   │   │   │   ├── Join.cs
    │   │   │   │   │   │   ├── Join.cs.meta
    │   │   │   │   │   │   ├── Last.cs
    │   │   │   │   │   │   ├── Last.cs.meta
    │   │   │   │   │   │   ├── LongCount.cs
    │   │   │   │   │   │   ├── LongCount.cs.meta
    │   │   │   │   │   │   ├── Max.cs
    │   │   │   │   │   │   ├── Max.cs.meta
    │   │   │   │   │   │   ├── Merge.cs
    │   │   │   │   │   │   ├── Merge.cs.meta
    │   │   │   │   │   │   ├── Min.cs
    │   │   │   │   │   │   ├── Min.cs.meta
    │   │   │   │   │   │   ├── MinMax.cs
    │   │   │   │   │   │   ├── MinMax.cs.meta
    │   │   │   │   │   │   ├── MinMax.tt
    │   │   │   │   │   │   ├── MinMax.tt.meta
    │   │   │   │   │   │   ├── Never.cs
    │   │   │   │   │   │   ├── Never.cs.meta
    │   │   │   │   │   │   ├── OfType.cs
    │   │   │   │   │   │   ├── OfType.cs.meta
    │   │   │   │   │   │   ├── OrderBy.cs
    │   │   │   │   │   │   ├── OrderBy.cs.meta
    │   │   │   │   │   │   ├── Pairwise.cs
    │   │   │   │   │   │   ├── Pairwise.cs.meta
    │   │   │   │   │   │   ├── Publish.cs
    │   │   │   │   │   │   ├── Publish.cs.meta
    │   │   │   │   │   │   ├── Queue.cs
    │   │   │   │   │   │   ├── Queue.cs.meta
    │   │   │   │   │   │   ├── Range.cs
    │   │   │   │   │   │   ├── Range.cs.meta
    │   │   │   │   │   │   ├── Repeat.cs
    │   │   │   │   │   │   ├── Repeat.cs.meta
    │   │   │   │   │   │   ├── Return.cs
    │   │   │   │   │   │   ├── Return.cs.meta
    │   │   │   │   │   │   ├── Reverse.cs
    │   │   │   │   │   │   ├── Reverse.cs.meta
    │   │   │   │   │   │   ├── Select.cs
    │   │   │   │   │   │   ├── Select.cs.meta
    │   │   │   │   │   │   ├── SelectMany.cs
    │   │   │   │   │   │   ├── SelectMany.cs.meta
    │   │   │   │   │   │   ├── SequenceEqual.cs
    │   │   │   │   │   │   ├── SequenceEqual.cs.meta
    │   │   │   │   │   │   ├── Single.cs
    │   │   │   │   │   │   ├── Single.cs.meta
    │   │   │   │   │   │   ├── Skip.cs
    │   │   │   │   │   │   ├── Skip.cs.meta
    │   │   │   │   │   │   ├── SkipLast.cs
    │   │   │   │   │   │   ├── SkipLast.cs.meta
    │   │   │   │   │   │   ├── SkipUntil.cs
    │   │   │   │   │   │   ├── SkipUntil.cs.meta
    │   │   │   │   │   │   ├── SkipUntilCanceled.cs
    │   │   │   │   │   │   ├── SkipUntilCanceled.cs.meta
    │   │   │   │   │   │   ├── SkipWhile.cs
    │   │   │   │   │   │   ├── SkipWhile.cs.meta
    │   │   │   │   │   │   ├── Subscribe.cs
    │   │   │   │   │   │   ├── Subscribe.cs.meta
    │   │   │   │   │   │   ├── Sum.cs
    │   │   │   │   │   │   ├── Sum.cs.meta
    │   │   │   │   │   │   ├── Sum.tt
    │   │   │   │   │   │   ├── Sum.tt.meta
    │   │   │   │   │   │   ├── Take.cs
    │   │   │   │   │   │   ├── Take.cs.meta
    │   │   │   │   │   │   ├── TakeLast.cs
    │   │   │   │   │   │   ├── TakeLast.cs.meta
    │   │   │   │   │   │   ├── TakeUntil.cs
    │   │   │   │   │   │   ├── TakeUntil.cs.meta
    │   │   │   │   │   │   ├── TakeUntilCanceled.cs
    │   │   │   │   │   │   ├── TakeUntilCanceled.cs.meta
    │   │   │   │   │   │   ├── TakeWhile.cs
    │   │   │   │   │   │   ├── TakeWhile.cs.meta
    │   │   │   │   │   │   ├── Throw.cs
    │   │   │   │   │   │   ├── Throw.cs.meta
    │   │   │   │   │   │   ├── ToArray.cs
    │   │   │   │   │   │   ├── ToArray.cs.meta
    │   │   │   │   │   │   ├── ToDictionary.cs
    │   │   │   │   │   │   ├── ToDictionary.cs.meta
    │   │   │   │   │   │   ├── ToHashSet.cs
    │   │   │   │   │   │   ├── ToHashSet.cs.meta
    │   │   │   │   │   │   ├── ToList.cs
    │   │   │   │   │   │   ├── ToList.cs.meta
    │   │   │   │   │   │   ├── ToLookup.cs
    │   │   │   │   │   │   ├── ToLookup.cs.meta
    │   │   │   │   │   │   ├── ToObservable.cs
    │   │   │   │   │   │   ├── ToObservable.cs.meta
    │   │   │   │   │   │   ├── ToUniTaskAsyncEnumerable.cs
    │   │   │   │   │   │   ├── ToUniTaskAsyncEnumerable.cs.meta
    │   │   │   │   │   │   ├── UniTask.Linq.asmdef
    │   │   │   │   │   │   ├── UniTask.Linq.asmdef.meta
    │   │   │   │   │   │   ├── Union.cs
    │   │   │   │   │   │   ├── Union.cs.meta
    │   │   │   │   │   │   ├── UnityExtensions/
    │   │   │   │   │   │   │   ├── EveryUpdate.cs
    │   │   │   │   │   │   │   ├── EveryUpdate.cs.meta
    │   │   │   │   │   │   │   ├── EveryValueChanged.cs
    │   │   │   │   │   │   │   ├── EveryValueChanged.cs.meta
    │   │   │   │   │   │   │   ├── Timer.cs
    │   │   │   │   │   │   │   └── Timer.cs.meta
    │   │   │   │   │   │   ├── UnityExtensions.meta
    │   │   │   │   │   │   ├── Where.cs
    │   │   │   │   │   │   ├── Where.cs.meta
    │   │   │   │   │   │   ├── Zip.cs
    │   │   │   │   │   │   └── Zip.cs.meta
    │   │   │   │   │   ├── Linq.meta
    │   │   │   │   │   ├── MoveNextSource.cs
    │   │   │   │   │   ├── MoveNextSource.cs.meta
    │   │   │   │   │   ├── PlayerLoopHelper.cs
    │   │   │   │   │   ├── PlayerLoopHelper.cs.meta
    │   │   │   │   │   ├── PlayerLoopTimer.cs
    │   │   │   │   │   ├── PlayerLoopTimer.cs.meta
    │   │   │   │   │   ├── Progress.cs
    │   │   │   │   │   ├── Progress.cs.meta
    │   │   │   │   │   ├── TaskPool.cs
    │   │   │   │   │   ├── TaskPool.cs.meta
    │   │   │   │   │   ├── TimeoutController.cs
    │   │   │   │   │   ├── TimeoutController.cs.meta
    │   │   │   │   │   ├── TriggerEvent.cs
    │   │   │   │   │   ├── TriggerEvent.cs.meta
    │   │   │   │   │   ├── Triggers/
    │   │   │   │   │   │   ├── AsyncAwakeTrigger.cs
    │   │   │   │   │   │   ├── AsyncAwakeTrigger.cs.meta
    │   │   │   │   │   │   ├── AsyncDestroyTrigger.cs
    │   │   │   │   │   │   ├── AsyncDestroyTrigger.cs.meta
    │   │   │   │   │   │   ├── AsyncStartTrigger.cs
    │   │   │   │   │   │   ├── AsyncStartTrigger.cs.meta
    │   │   │   │   │   │   ├── AsyncTriggerBase.cs
    │   │   │   │   │   │   ├── AsyncTriggerBase.cs.meta
    │   │   │   │   │   │   ├── AsyncTriggerExtensions.cs
    │   │   │   │   │   │   ├── AsyncTriggerExtensions.cs.meta
    │   │   │   │   │   │   ├── MonoBehaviourMessagesTriggers.cs
    │   │   │   │   │   │   ├── MonoBehaviourMessagesTriggers.cs.meta
    │   │   │   │   │   │   ├── MonoBehaviourMessagesTriggers.tt
    │   │   │   │   │   │   └── MonoBehaviourMessagesTriggers.tt.meta
    │   │   │   │   │   ├── Triggers.meta
    │   │   │   │   │   ├── UniTask.AsValueTask.cs
    │   │   │   │   │   ├── UniTask.AsValueTask.cs.meta
    │   │   │   │   │   ├── UniTask.Bridge.cs
    │   │   │   │   │   ├── UniTask.Bridge.cs.meta
    │   │   │   │   │   ├── UniTask.Delay.cs
    │   │   │   │   │   ├── UniTask.Delay.cs.meta
    │   │   │   │   │   ├── UniTask.Factory.cs
    │   │   │   │   │   ├── UniTask.Factory.cs.meta
    │   │   │   │   │   ├── UniTask.Run.cs
    │   │   │   │   │   ├── UniTask.Run.cs.meta
    │   │   │   │   │   ├── UniTask.Threading.cs
    │   │   │   │   │   ├── UniTask.Threading.cs.meta
    │   │   │   │   │   ├── UniTask.WaitUntil.cs
    │   │   │   │   │   ├── UniTask.WaitUntil.cs.meta
    │   │   │   │   │   ├── UniTask.WhenAll.Generated.cs
    │   │   │   │   │   ├── UniTask.WhenAll.Generated.cs.meta
    │   │   │   │   │   ├── UniTask.WhenAll.Generated.tt
    │   │   │   │   │   ├── UniTask.WhenAll.Generated.tt.meta
    │   │   │   │   │   ├── UniTask.WhenAll.cs
    │   │   │   │   │   ├── UniTask.WhenAll.cs.meta
    │   │   │   │   │   ├── UniTask.WhenAny.Generated.cs
    │   │   │   │   │   ├── UniTask.WhenAny.Generated.cs.meta
    │   │   │   │   │   ├── UniTask.WhenAny.Generated.tt
    │   │   │   │   │   ├── UniTask.WhenAny.Generated.tt.meta
    │   │   │   │   │   ├── UniTask.WhenAny.cs
    │   │   │   │   │   ├── UniTask.WhenAny.cs.meta
    │   │   │   │   │   ├── UniTask.WhenEach.cs
    │   │   │   │   │   ├── UniTask.WhenEach.cs.meta
    │   │   │   │   │   ├── UniTask.asmdef
    │   │   │   │   │   ├── UniTask.asmdef.meta
    │   │   │   │   │   ├── UniTask.cs
    │   │   │   │   │   ├── UniTask.cs.meta
    │   │   │   │   │   ├── UniTaskCompletionSource.cs
    │   │   │   │   │   ├── UniTaskCompletionSource.cs.meta
    │   │   │   │   │   ├── UniTaskExtensions.Shorthand.cs
    │   │   │   │   │   ├── UniTaskExtensions.Shorthand.cs.meta
    │   │   │   │   │   ├── UniTaskExtensions.Shorthand.tt
    │   │   │   │   │   ├── UniTaskExtensions.Shorthand.tt.meta
    │   │   │   │   │   ├── UniTaskExtensions.cs
    │   │   │   │   │   ├── UniTaskExtensions.cs.meta
    │   │   │   │   │   ├── UniTaskObservableExtensions.cs
    │   │   │   │   │   ├── UniTaskObservableExtensions.cs.meta
    │   │   │   │   │   ├── UniTaskScheduler.cs
    │   │   │   │   │   ├── UniTaskScheduler.cs.meta
    │   │   │   │   │   ├── UniTaskSynchronizationContext.cs
    │   │   │   │   │   ├── UniTaskSynchronizationContext.cs.meta
    │   │   │   │   │   ├── UniTaskVoid.cs
    │   │   │   │   │   ├── UniTaskVoid.cs.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.AssetBundleRequestAllAssets.cs
    │   │   │   │   │   ├── UnityAsyncExtensions.AssetBundleRequestAllAssets.cs.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.AsyncGPUReadback.cs
    │   │   │   │   │   ├── UnityAsyncExtensions.AsyncGPUReadback.cs.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.AsyncInstantiate.cs
    │   │   │   │   │   ├── UnityAsyncExtensions.AsyncInstantiate.cs.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.Jobs.cs
    │   │   │   │   │   ├── UnityAsyncExtensions.Jobs.cs.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.MonoBehaviour.cs
    │   │   │   │   │   ├── UnityAsyncExtensions.MonoBehaviour.cs.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.cs
    │   │   │   │   │   ├── UnityAsyncExtensions.cs.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.tt
    │   │   │   │   │   ├── UnityAsyncExtensions.tt.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.uGUI.cs
    │   │   │   │   │   ├── UnityAsyncExtensions.uGUI.cs.meta
    │   │   │   │   │   ├── UnityAwaitableExtensions.cs
    │   │   │   │   │   ├── UnityAwaitableExtensions.cs.meta
    │   │   │   │   │   ├── UnityBindingExtensions.cs
    │   │   │   │   │   ├── UnityBindingExtensions.cs.meta
    │   │   │   │   │   ├── UnityWebRequestException.cs
    │   │   │   │   │   ├── UnityWebRequestException.cs.meta
    │   │   │   │   │   ├── _InternalVisibleTo.cs
    │   │   │   │   │   └── _InternalVisibleTo.cs.meta
    │   │   │   │   ├── Runtime.meta
    │   │   │   │   ├── package.json
    │   │   │   │   └── package.json.meta
    │   │   │   └── UniTask.meta
    │   │   ├── Plugins.meta
    │   │   ├── Scenes/
    │   │   │   ├── EditorTest1.cs
    │   │   │   ├── EditorTest1.cs.meta
    │   │   │   ├── ExceptionExamples.cs
    │   │   │   ├── ExceptionExamples.cs.meta
    │   │   │   ├── ExceptionExamples.unity
    │   │   │   ├── ExceptionExamples.unity.meta
    │   │   │   ├── MiddlewareSample.cs
    │   │   │   ├── MiddlewareSample.cs.meta
    │   │   │   ├── SandboxMain.cs
    │   │   │   ├── SandboxMain.cs.meta
    │   │   │   ├── SandboxMain.unity
    │   │   │   ├── SandboxMain.unity.meta
    │   │   │   ├── WaitWhileTest.cs
    │   │   │   └── WaitWhileTest.cs.meta
    │   │   ├── Scenes.meta
    │   │   ├── StreamingAssets/
    │   │   │   ├── test.txt
    │   │   │   └── test.txt.meta
    │   │   ├── StreamingAssets.meta
    │   │   ├── TempAsm/
    │   │   │   ├── FooMonoBehaviour.cs
    │   │   │   ├── FooMonoBehaviour.cs.meta
    │   │   │   ├── TempAsm.asmdef
    │   │   │   └── TempAsm.asmdef.meta
    │   │   ├── TempAsm.meta
    │   │   ├── Tests/
    │   │   │   ├── AsyncOperationTest.cs
    │   │   │   ├── AsyncOperationTest.cs.meta
    │   │   │   ├── AsyncTest.cs
    │   │   │   ├── AsyncTest.cs.meta
    │   │   │   ├── CachelikeTest.cs
    │   │   │   ├── CachelikeTest.cs.meta
    │   │   │   ├── CoroutineToUniTaskTest.cs
    │   │   │   ├── CoroutineToUniTaskTest.cs.meta
    │   │   │   ├── DelayTest.cs
    │   │   │   ├── DelayTest.cs.meta
    │   │   │   ├── Editor/
    │   │   │   │   ├── AsyncTestEditor.cs
    │   │   │   │   ├── AsyncTestEditor.cs.meta
    │   │   │   │   ├── RunTestEditor.cs
    │   │   │   │   ├── RunTestEditor.cs.meta
    │   │   │   │   ├── UniTask.Tests.Editor.asmdef
    │   │   │   │   ├── UniTask.Tests.Editor.asmdef.meta
    │   │   │   │   ├── WhenAnyTestEditor.cs
    │   │   │   │   └── WhenAnyTestEditor.cs.meta
    │   │   │   ├── Editor.meta
    │   │   │   ├── GenericsWhenAllAny.cs
    │   │   │   ├── GenericsWhenAllAny.cs.meta
    │   │   │   ├── PlayerLoopTimerTest.cs
    │   │   │   ├── PlayerLoopTimerTest.cs.meta
    │   │   │   ├── Preserve.cs
    │   │   │   ├── Preserve.cs.meta
    │   │   │   ├── Resources/
    │   │   │   │   └── sample_texture.png.meta
    │   │   │   ├── Resources.meta
    │   │   │   ├── RunTest.cs
    │   │   │   ├── RunTest.cs.meta
    │   │   │   ├── Shims.cs
    │   │   │   ├── Shims.cs.meta
    │   │   │   ├── UniTask.Tests.asmdef
    │   │   │   ├── UniTask.Tests.asmdef.meta
    │   │   │   ├── WhenAnyTest.cs
    │   │   │   └── WhenAnyTest.cs.meta
    │   │   └── Tests.meta
    │   ├── Packages/
    │   │   ├── manifest.json
    │   │   └── packages-lock.json
    │   └── ProjectSettings/
    │       ├── AudioManager.asset
    │       ├── ClusterInputManager.asset
    │       ├── DynamicsManager.asset
    │       ├── EditorBuildSettings.asset
    │       ├── EditorSettings.asset
    │       ├── GraphicsSettings.asset
    │       ├── InputManager.asset
    │       ├── MemorySettings.asset
    │       ├── NavMeshAreas.asset
    │       ├── NetworkManager.asset
    │       ├── PackageManagerSettings.asset
    │       ├── Physics2DSettings.asset
    │       ├── PresetManager.asset
    │       ├── ProjectSettings.asset
    │       ├── ProjectVersion.txt
    │       ├── QualitySettings.asset
    │       ├── SceneTemplateSettings.json
    │       ├── TagManager.asset
    │       ├── TimeManager.asset
    │       ├── UnityConnectSettings.asset
    │       ├── VFXManager.asset
    │       ├── VersionControlSettings.asset
    │       └── XRSettings.asset
    ├── UniTask.Analyzer/
    │   ├── Properties/
    │   │   └── launchSettings.json
    │   ├── UniTask.Analyzer.csproj
    │   └── UniTaskAnalyzer.cs
    ├── UniTask.NetCore/
    │   ├── NetCore/
    │   │   ├── AsyncEnumerableExtensions.cs
    │   │   ├── UniTask.Delay.cs
    │   │   ├── UniTask.Run.cs
    │   │   └── UniTask.Yield.cs
    │   └── UniTask.NetCore.csproj
    ├── UniTask.NetCoreSandbox/
    │   ├── Program.cs
    │   └── UniTask.NetCoreSandbox.csproj
    └── UniTask.NetCoreTests/
        ├── AsyncLazyTest.cs
        ├── AsyncReactivePropertyTest.cs
        ├── CancellationTokenTest.cs
        ├── ChannelTest.cs
        ├── CompletionSourceTest.cs
        ├── DeferTest.cs
        ├── Linq/
        │   ├── Aggregate.cs
        │   ├── AllAny.cs
        │   ├── Concat.cs
        │   ├── Convert.cs
        │   ├── CreateTest.cs
        │   ├── Factory.cs
        │   ├── Filtering.cs
        │   ├── FirstLast.cs
        │   ├── Joins.cs
        │   ├── Merge.cs
        │   ├── Paging.cs
        │   ├── Projection.cs
        │   ├── PulbishTest.cs
        │   ├── QueueTest.cs
        │   ├── Sets.cs
        │   ├── Sort.cs
        │   ├── TakeInfinityTest.cs
        │   └── _Exception.cs
        ├── TaskBuilderCases.cs
        ├── TaskExtensionsTest.cs
        ├── TriggerEventTest.cs
        ├── UniTask.NetCoreTests.csproj
        ├── UniTaskCompletionSourceTest.cs
        ├── WhenEachTest.cs
        └── WithCancellationTest.cs

================================================
FILE CONTENTS
================================================

================================================
FILE: .config/dotnet-tools.json
================================================
{
  "version": 1,
  "isRoot": true,
  "tools": {
    "docfx": {
      "version": "2.78.3",
      "commands": [
        "docfx"
      ],
      "rollForward": false
    }
  }
}


================================================
FILE: .editorconfig
================================================
# top-most EditorConfig file
root = true

[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true

# Visual Studio Spell checker configs (https://learn.microsoft.com/en-us/visualstudio/ide/text-spell-checker?view=vs-2022#how-to-customize-the-spell-checker)
spelling_exclusion_path  = ./exclusion.dic

[*.cs]
indent_size = 4
charset = utf-8-bom
end_of_line = unset

# Solution files
[*.{sln,slnx}]
end_of_line = unset

# MSBuild project files
[*.{csproj,props,targets}]
end_of_line = unset

# Xml config files
[*.{ruleset,config,nuspec,resx,runsettings,DotSettings}]
end_of_line = unset

[*{_AssemblyInfo.cs,.notsupported.cs}]
generated_code = true

# C# code style settings
[*.{cs}]
dotnet_diagnostic.IDE0044.severity = none # IDE0044: Make field readonly

# https://stackoverflow.com/questions/79195382/how-to-disable-fading-unused-methods-in-visual-studio-2022-17-12-0
dotnet_diagnostic.IDE0051.severity = none # IDE0051: Remove unused private member
dotnet_diagnostic.IDE0130.severity = none # IDE0130: Namespace does not match folder structure


================================================
FILE: .github/FUNDING.yml
================================================
github: [neuecc]


================================================
FILE: .github/dependabot.yaml
================================================
# ref: https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot
version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly" # Check for updates to GitHub Actions every week
    groups:
      dependencies:
        patterns:
          - "*"
    cooldown:
      default-days: 14 # Wait 14 days before creating another PR for the same dependency. This will prevent vulnerability on the package impact.
    ignore:
      # I just want update action when major/minor version is updated. patch updates are too noisy.
      - dependency-name: "*"
        update-types:
          - version-update:semver-patch


================================================
FILE: .github/workflows/build-debug.yaml
================================================
name: Build-Debug

on:
  push:
    branches:
      - "master"
  pull_request:
    branches:
      - "master"

jobs:
  build-dotnet:
    permissions:
      contents: read
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    steps:
      - uses: Cysharp/Actions/.github/actions/checkout@main
      - uses: Cysharp/Actions/.github/actions/setup-dotnet@main
      - run: dotnet build -c Release
      - run: dotnet test -c Release
      - run: dotnet pack -c Release --no-build -p:IncludeSymbols=true -o $GITHUB_WORKSPACE/artifacts

  build-unity:
    if: ${{ ((github.event_name == 'push' && github.repository_owner == 'Cysharp') || startsWith(github.event.pull_request.head.label, 'Cysharp:')) && github.triggering_actor != 'dependabot[bot]' }}
    strategy:
      fail-fast: false
      max-parallel: 2
      matrix:
        unity: ["2022.3.39f1", "6000.0.12f1"] # Test with LTS
    permissions:
      contents: read
    runs-on: ubuntu-24.04
    timeout-minutes: 30 # Unity build takes more than 20min.
    steps:
      - name: Load secrets
        id: op-load-secret
        uses: 1password/load-secrets-action@581a835fb51b8e7ec56b71cf2ffddd7e68bb25e0 # v2.0.0
        with:
          export-env: false
        env:
          OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN_PUBLIC }}
          UNITY_EMAIL: "op://${{ vars.OP_VAULT_ACTIONS_PUBLIC }}/UNITY_LICENSE/username"
          UNITY_PASSWORD: "op://${{ vars.OP_VAULT_ACTIONS_PUBLIC }}/UNITY_LICENSE/credential"
          UNITY_SERIAL: "op://${{ vars.OP_VAULT_ACTIONS_PUBLIC }}/UNITY_LICENSE/serial"

      - uses: Cysharp/Actions/.github/actions/checkout@main

      # Execute scripts: Export Package
      #  /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -logFile -projectPath . -executeMethod PackageExporter.Export
      - name: Build Unity (.unitypacakge)
        if: ${{ startsWith(matrix.unity, '2022') }} # only execute once
        uses: Cysharp/Actions/.github/actions/unity-builder@main
        env:
          UNITY_EMAIL: ${{ steps.op-load-secret.outputs.UNITY_EMAIL }}
          UNITY_PASSWORD: ${{ steps.op-load-secret.outputs.UNITY_PASSWORD }}
          UNITY_SERIAL: ${{ steps.op-load-secret.outputs.UNITY_SERIAL }}
        with:
          projectPath: src/UniTask
          unityVersion: ${{ matrix.unity }}
          targetPlatform: StandaloneLinux64
          buildMethod: PackageExporter.Export

      # Execute UnitTest
      # /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -logFile -projectPath . -executeMethod UnitTestBuilder.BuildUnitTest /headless /ScriptBackend IL2CPP /BuildTarget StandaloneLinux64
      - name: Build UnitTest (IL2CPP)
        uses: Cysharp/Actions/.github/actions/unity-builder@main
        env:
          UNITY_EMAIL: ${{ steps.op-load-secret.outputs.UNITY_EMAIL }}
          UNITY_PASSWORD: ${{ steps.op-load-secret.outputs.UNITY_PASSWORD }}
          UNITY_SERIAL: ${{ steps.op-load-secret.outputs.UNITY_SERIAL }}
        with:
          projectPath: src/UniTask
          unityVersion: ${{ matrix.unity }}
          targetPlatform: StandaloneLinux64
          buildMethod: UnitTestBuilder.BuildUnitTest
          customParameters: "/headless /ScriptBackend IL2CPP"
      - name: Check UnitTest file is generated
        run: ls -lR ./src/UniTask/bin/UnitTest
      - name: Execute UnitTest
        run: ./src/UniTask/bin/UnitTest/StandaloneLinux64_IL2CPP/test

      - uses: Cysharp/Actions/.github/actions/check-metas@main # check meta files
        with:
          directory: src/UniTask

      # Store artifacts.
      - uses: Cysharp/Actions/.github/actions/upload-artifact@main
        if: ${{ startsWith(matrix.unity, '2021') }} # only execute 2021
        with:
          name: UniTask.unitypackage-${{ matrix.unity }}.zip
          path: ./src/UniTask/*.unitypackage
          retention-days: 1


================================================
FILE: .github/workflows/build-docs.yaml
================================================
name: build-docs

on:
  push:
    branches:
      - master
      - feature/docs

jobs:
  run-docfx:
    if: ${{ ((github.event_name == 'push' && github.repository_owner == 'Cysharp') || startsWith(github.event.pull_request.head.label, 'Cysharp:')) && github.triggering_actor != 'dependabot[bot]' }}
    permissions:
      contents: write
      pages: write
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    steps:
      - name: Load secrets
        id: op-load-secret
        uses: 1password/load-secrets-action@581a835fb51b8e7ec56b71cf2ffddd7e68bb25e0 # v2.0.0
        with:
          export-env: false
        env:
          OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN_PUBLIC }}
          UNITY_EMAIL: "op://${{ vars.OP_VAULT_ACTIONS_PUBLIC }}/UNITY_LICENSE/username"
          UNITY_PASSWORD: "op://${{ vars.OP_VAULT_ACTIONS_PUBLIC }}/UNITY_LICENSE/credential"
          UNITY_SERIAL: "op://${{ vars.OP_VAULT_ACTIONS_PUBLIC }}/UNITY_LICENSE/serial"
      - uses: Cysharp/Actions/.github/actions/checkout@main
      # Execute scripts: Export Package
      #  /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -logFile -projectPath . -executeMethod PackageExporter.Export
      - name: Build Unity (.unitypackage)
        uses: Cysharp/Actions/.github/actions/unity-builder@main
        env:
          UNITY_EMAIL: ${{ steps.op-load-secret.outputs.UNITY_EMAIL }}
          UNITY_PASSWORD: ${{ steps.op-load-secret.outputs.UNITY_PASSWORD }}
          UNITY_SERIAL: ${{ steps.op-load-secret.outputs.UNITY_SERIAL }}
        with:
          projectPath: src/UniTask
          unityVersion: "2022.3.39f1"
          targetPlatform: StandaloneLinux64
          buildMethod: PackageExporter.Export

      - uses: Cysharp/Actions/.github/actions/checkout@main
        with:
          repository: Cysharp/DocfxTemplate
          path: docs/_DocfxTemplate
      - uses: Cysharp/Actions/.github/actions/setup-dotnet@main
      - name: dotnet tool restore
        run: dotnet tool restore
      - name: Docfx metadata
        run: dotnet docfx metadata docs/docfx.json
      - name: Docfx build
        run: dotnet docfx build docs/docfx.json
      - name: Publish to GitHub Pages
        uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4.0.0
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: docs/_site


================================================
FILE: .github/workflows/build-release.yaml
================================================
name: build-release

on:
  workflow_dispatch:
    inputs:
      tag:
        description: "tag: git tag you want create. (sample 1.0.0)"
        required: true
      dry-run:
        description: "dry-run: true will never create relase/nuget."
        required: true
        default: false
        type: boolean

jobs:
  update-packagejson:
    permissions:
      actions: read
      contents: write
    uses: Cysharp/Actions/.github/workflows/update-packagejson.yaml@main
    with:
      file-path: ./src/UniTask/Assets/Plugins/UniTask/package.json
      tag: ${{ inputs.tag }}
      dry-run: ${{ inputs.dry-run }}

  build-dotnet:
    needs: [update-packagejson]
    permissions:
      contents: read
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    steps:
      - run: echo ${{ needs.update-packagejson.outputs.sha }}
      - uses: Cysharp/Actions/.github/actions/checkout@main
        with:
          ref: ${{ needs.update-packagejson.outputs.sha }}
      - uses: Cysharp/Actions/.github/actions/setup-dotnet@main
      # build and pack
      - run: dotnet build -c Release -p:Version=${{ inputs.tag }}
      - run: dotnet test -c Release --no-build
      - run: dotnet pack ./src/UniTask.NetCore/UniTask.NetCore.csproj -c Release --no-build -p:Version=${{ inputs.tag }} -o ./publish
      # Store artifacts.
      - uses: Cysharp/Actions/.github/actions/upload-artifact@main
        with:
          name: nuget
          path: ./publish/
          retention-days: 1

  build-unity:
    needs: [update-packagejson]
    strategy:
      matrix:
        unity: ["2022.3.39f1"]
    permissions:
      contents: read
    runs-on: ubuntu-24.04
    timeout-minutes: 15
    steps:
      - name: Load secrets
        id: op-load-secret
        uses: 1password/load-secrets-action@581a835fb51b8e7ec56b71cf2ffddd7e68bb25e0 # v2.0.0
        with:
          export-env: false
        env:
          OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN_PUBLIC }}
          UNITY_EMAIL: "op://${{ vars.OP_VAULT_ACTIONS_PUBLIC }}/UNITY_LICENSE/username"
          UNITY_PASSWORD: "op://${{ vars.OP_VAULT_ACTIONS_PUBLIC }}/UNITY_LICENSE/credential"
          UNITY_SERIAL: "op://${{ vars.OP_VAULT_ACTIONS_PUBLIC }}/UNITY_LICENSE/serial"

      - run: echo ${{ needs.update-packagejson.outputs.sha }}
      - uses: Cysharp/Actions/.github/actions/checkout@main
        with:
          ref: ${{ needs.update-packagejson.outputs.sha }}
      # Execute scripts: Export Package
      # /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -logFile -projectPath . -executeMethod PackageExporter.Export
      - name: Build Unity (.unitypacakge)
        uses: Cysharp/Actions/.github/actions/unity-builder@main
        env:
          UNITY_EMAIL: ${{ steps.op-load-secret.outputs.UNITY_EMAIL }}
          UNITY_PASSWORD: ${{ steps.op-load-secret.outputs.UNITY_PASSWORD }}
          UNITY_SERIAL: ${{ steps.op-load-secret.outputs.UNITY_SERIAL }}
        with:
          projectPath: src/UniTask
          unityVersion: ${{ matrix.unity }}
          targetPlatform: StandaloneLinux64
          buildMethod: PackageExporter.Export

      - uses: Cysharp/Actions/.github/actions/check-metas@main # check meta files
        with:
          directory: src/UniTask

      # Store artifacts.
      - uses: Cysharp/Actions/.github/actions/upload-artifact@main
        with:
          name: UniTask.${{ inputs.tag }}.unitypackage
          path: ./src/UniTask/UniTask.${{ inputs.tag }}.unitypackage
          retention-days: 1

  # release
  create-release:
    needs: [update-packagejson, build-dotnet, build-unity]
    permissions:
      contents: write
      id-token: write # required for NuGet Trusted Publish
    uses: Cysharp/Actions/.github/workflows/create-release.yaml@main
    with:
      commit-id: ${{ needs.update-packagejson.outputs.sha }}
      dry-run: ${{ inputs.dry-run }}
      tag: ${{ inputs.tag }}
      nuget-push: true
      release-upload: true
      release-asset-path: ./UniTask.${{ inputs.tag }}.unitypackage/UniTask.${{ inputs.tag }}.unitypackage
    secrets: inherit

  cleanup:
    if: ${{ needs.update-packagejson.outputs.is-branch-created == 'true' }}
    needs: [update-packagejson, build-dotnet, build-unity]
    permissions:
      contents: write
    uses: Cysharp/Actions/.github/workflows/clean-packagejson-branch.yaml@main
    with:
      branch: ${{ needs.update-packagejson.outputs.branch-name }}


================================================
FILE: .github/workflows/prevent-github-change.yaml
================================================
name: Prevent github change
on:
  pull_request:
    paths:
      - ".github/**/*.yaml"
      - ".github/**/*.yml"

jobs:
  detect:
    permissions:
      contents: read
    uses: Cysharp/Actions/.github/workflows/prevent-github-change.yaml@main


================================================
FILE: .github/workflows/stale.yaml
================================================
name: "Close stale issues"

on:
  workflow_dispatch:
  schedule:
    - cron: "0 0 * * *"

jobs:
  stale:
    permissions:
      contents: read
      pull-requests: write
      issues: write
    uses: Cysharp/Actions/.github/workflows/stale-issue.yaml@main


================================================
FILE: .github/workflows/toc.yaml
================================================
name: TOC Generator

on:
  push:
    paths:
      - 'README.md'

jobs:
  toc:
    permissions:
      contents: write
    uses: Cysharp/Actions/.github/workflows/toc-generator.yaml@main
    with:
      TOC_TITLE: "## Table of Contents"
    secrets: inherit


================================================
FILE: .gitignore
================================================
# Unity

*.pidb
*.suo
*.userprefs
*.vsmdi
*.testsettings
*/bin
*/obj
*/publish
$tf
TestResults
!*.sln
!*.csproj
!*/*.csproj
[Ll]ibrary/
[Tt]emp/
[Oo]bj/

# VS2013

# Build Folders (you can keep bin if you'd like, to store dlls and pdbs)
[Bb]in/
[Oo]bj/

# mstest test results
TestResults

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.sln.docstates

# Build results
[Dd]ebug/
[Rr]elease/
x64/
*_i.c
*_p.c
*.ilk
# *.meta # already ignored in Unity section
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.log
*.vspscc
*.vssscc
.builds

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf

# Visual Studio profiler
*.psess
*.vsp
*.vspx

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*

# NCrunch
*.ncrunch*
.*crunch*.local.xml

# Installshield output folder
[Ee]xpress

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish

# Publish Web Output
*.Publish.xml

# NuGet Packages Directory
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
# packages # upm pacakge will use Packages
# **/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
# !**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Windows Azure Build Output
csx
*.build.csdef

# Windows Store app package directory
AppPackages/

# Others
[Bb]in
[Oo]bj
sql
TestResults
[Tt]est[Rr]esult*
*.Cache
ClientBin
[Ss]tyle[Cc]op.*
~$*
*.dbmdl
Generated_Code #added for RIA/Silverlight projects

# Backup & report files from converting an old project file to a newer
# Visual Studio version. Backup files are not needed, because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
Assets/WSATestCertificate.pfx
.vs/

# Unity

# Unity
.vsconfig
src/UniTask/Library/*
src/UniTask/Temp/*
src/UniTask/Logs/*
src/UniTask/[Uu]ser[Ss]ettings/
src/UniTask/*.sln
src/UniTask/*.csproj
src/UniTask/*.unitypackage
!src/UniTask/Packages/


================================================
FILE: Directory.Build.props
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <SignAssembly>true</SignAssembly>
    <AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)opensource.snk</AssemblyOriginatorKeyFile>

    <!-- NuGet Package Information -->
    <IsPackable>false</IsPackable>
    <PackageVersion>$(Version)</PackageVersion>
    <Company>Cysharp</Company>
    <Authors>Cysharp</Authors>
    <Copyright>© Cysharp, Inc.</Copyright>
    <PackageTags>task;async</PackageTags>
    <PackageProjectUrl>https://github.com/Cysharp/UniTask</PackageProjectUrl>
    <PackageReadmeFile>README.md</PackageReadmeFile>
    <RepositoryUrl>$(PackageProjectUrl)</RepositoryUrl>
    <RepositoryType>git</RepositoryType>
    <PackageLicenseExpression>MIT</PackageLicenseExpression>
    <PackageIcon>Icon.png</PackageIcon>
  </PropertyGroup>

  <ItemGroup>
    <None Include="$(MSBuildThisFileDirectory)Icon.png" Pack="true" PackagePath="\" />
    <None Include="$(MSBuildThisFileDirectory)README.md" Pack="true" PackagePath="\" />
    <EmbeddedResource Include="$(MSBuildThisFileDirectory)LICENSE" />
  </ItemGroup>
</Project>


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2019 Yoshifumi Kawai / Cysharp, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
UniTask
===
[![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)

Provides an efficient allocation free async/await integration for Unity.

* Struct based `UniTask<T>` and custom AsyncMethodBuilder to achieve zero allocation
* Makes all Unity AsyncOperations and Coroutines awaitable
* PlayerLoop based task(`UniTask.Yield`, `UniTask.Delay`, `UniTask.DelayFrame`, etc..) that enable replacing all coroutine operations
* MonoBehaviour Message Events and uGUI Events as awaitable/async-enumerable
* Runs completely on Unity's PlayerLoop so doesn't use threads and runs on WebGL, wasm, etc.
* Asynchronous LINQ, with Channel and AsyncReactiveProperty
* TaskTracker window to prevent memory leaks
* Highly compatible behaviour with Task/ValueTask/IValueTaskSource

For technical details, see blog post: [UniTask v2 — Zero Allocation async/await for Unity, with Asynchronous LINQ
](https://medium.com/@neuecc/unitask-v2-zero-allocation-async-await-for-unity-with-asynchronous-linq-1aa9c96aa7dd)  
For 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)

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
## Table of Contents

- [Getting started](#getting-started)
- [Basics of UniTask and AsyncOperation](#basics-of-unitask-and-asyncoperation)
- [Cancellation and Exception handling](#cancellation-and-exception-handling)
- [Timeout handling](#timeout-handling)
- [Progress](#progress)
- [PlayerLoop](#playerloop)
- [async void vs async UniTaskVoid](#async-void-vs-async-unitaskvoid)
- [UniTaskTracker](#unitasktracker)
- [External Assets](#external-assets)
- [AsyncEnumerable and Async LINQ](#asyncenumerable-and-async-linq)
- [Awaitable Events](#awaitable-events)
- [Channel](#channel)
- [vs Awaitable](#vs-awaitable)
- [For Unit Testing](#for-unit-testing)
- [ThreadPool limitation](#threadpool-limitation)
- [IEnumerator.ToUniTask limitation](#ienumeratortounitask-limitation)
- [For UnityEditor](#for-unityeditor)
- [Compare with Standard Task API](#compare-with-standard-task-api)
- [Pooling Configuration](#pooling-configuration)
- [Allocation on Profiler](#allocation-on-profiler)
- [UniTaskSynchronizationContext](#unitasksynchronizationcontext)
- [API References](#api-references)
- [UPM Package](#upm-package)
  - [Install via git URL](#install-via-git-url)
- [.NET Core](#net-core)
- [License](#license)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

Getting started
---
Install via [UPM package](#upm-package) with git reference or asset package(`UniTask.*.*.*.unitypackage`) available in [UniTask/releases](https://github.com/Cysharp/UniTask/releases).

```csharp
// extension awaiter/methods can be used by this namespace
using Cysharp.Threading.Tasks;

// You can return type as struct UniTask<T>(or UniTask), it is unity specialized lightweight alternative of Task<T>
// zero allocation and fast excution for zero overhead async/await integrate with Unity
async UniTask<string> DemoAsync()
{
    // You can await Unity's AsyncObject
    var asset = await Resources.LoadAsync<TextAsset>("foo");
    var txt = (await UnityWebRequest.Get("https://...").SendWebRequest()).downloadHandler.text;
    await SceneManager.LoadSceneAsync("scene2");

    // .WithCancellation enables Cancel, GetCancellationTokenOnDestroy synchornizes with lifetime of GameObject
    // after Unity 2022.2, you can use `destroyCancellationToken` in MonoBehaviour
    var asset2 = await Resources.LoadAsync<TextAsset>("bar").WithCancellation(this.GetCancellationTokenOnDestroy());

    // .ToUniTask accepts progress callback(and all options), Progress.Create is a lightweight alternative of IProgress<T>
    var asset3 = await Resources.LoadAsync<TextAsset>("baz").ToUniTask(Progress.Create<float>(x => Debug.Log(x)));

    // await frame-based operation like a coroutine
    await UniTask.DelayFrame(100); 

    // replacement of yield return new WaitForSeconds/WaitForSecondsRealtime
    await UniTask.Delay(TimeSpan.FromSeconds(10), ignoreTimeScale: false);
    
    // yield any playerloop timing(PreUpdate, Update, LateUpdate, etc...)
    await UniTask.Yield(PlayerLoopTiming.PreLateUpdate);

    // replacement of yield return null
    await UniTask.Yield();
    await UniTask.NextFrame();

    // replacement of WaitForEndOfFrame
#if UNITY_2023_1_OR_NEWER
    await UniTask.WaitForEndOfFrame();
#else
    // requires MonoBehaviour(CoroutineRunner))
    await UniTask.WaitForEndOfFrame(this); // this is MonoBehaviour
#endif

    // replacement of yield return new WaitForFixedUpdate(same as UniTask.Yield(PlayerLoopTiming.FixedUpdate))
    await UniTask.WaitForFixedUpdate();
    
    // replacement of yield return WaitUntil
    await UniTask.WaitUntil(() => isActive == false);

    // special helper of WaitUntil
    await UniTask.WaitUntilValueChanged(this, x => x.isActive);

    // You can await IEnumerator coroutines
    await FooCoroutineEnumerator();

    // You can await a standard task
    await Task.Run(() => 100);

    // Multithreading, run on ThreadPool under this code
    await UniTask.SwitchToThreadPool();

    /* work on ThreadPool */

    // return to MainThread(same as `ObserveOnMainThread` in UniRx)
    await UniTask.SwitchToMainThread();

    // get async webrequest
    async UniTask<string> GetTextAsync(UnityWebRequest req)
    {
        var op = await req.SendWebRequest();
        return op.downloadHandler.text;
    }

    var task1 = GetTextAsync(UnityWebRequest.Get("http://google.com"));
    var task2 = GetTextAsync(UnityWebRequest.Get("http://bing.com"));
    var task3 = GetTextAsync(UnityWebRequest.Get("http://yahoo.com"));

    // concurrent async-wait and get results easily by tuple syntax
    var (google, bing, yahoo) = await UniTask.WhenAll(task1, task2, task3);

    // shorthand of WhenAll, tuple can await directly
    var (google2, bing2, yahoo2) = await (task1, task2, task3);

    // return async-value.(or you can use `UniTask`(no result), `UniTaskVoid`(fire and forget)).
    return (asset as TextAsset)?.text ?? throw new InvalidOperationException("Asset not found");
}
```

Basics of UniTask and AsyncOperation
---
UniTask 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`.

Why 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.

You can await `AsyncOperation`, `ResourceRequest`, `AssetBundleRequest`, `AssetBundleCreateRequest`, `UnityWebRequestAsyncOperation`, `AsyncGPUReadbackRequest`, `IEnumerator` and others when `using Cysharp.Threading.Tasks;`.

UniTask provides three pattern of extension methods.

```csharp
* await asyncOperation;
* .WithCancellation(CancellationToken);
* .ToUniTask(IProgress, PlayerLoopTiming, CancellationToken);
```

`WithCancellation` is a simple version of `ToUniTask`, both return `UniTask`. For details of cancellation, see: [Cancellation and Exception handling](#cancellation-and-exception-handling) section.

> 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.

> Note: AssetBundleRequest has `asset` and `allAssets`, default await returns `asset`. If you want to get `allAssets`, you can use `AwaitForAllAssets()` method.

The 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.

```csharp
public async UniTaskVoid LoadManyAsync()
{
    // parallel load.
    var (a, b, c) = await UniTask.WhenAll(
        LoadAsSprite("foo"),
        LoadAsSprite("bar"),
        LoadAsSprite("baz"));
}

async UniTask<Sprite> LoadAsSprite(string path)
{
    var resource = await Resources.LoadAsync<Sprite>(path);
    return (resource as Sprite);
}
```

If you want to convert a callback to UniTask, you can use `UniTaskCompletionSource<T>` which is a lightweight edition of `TaskCompletionSource<T>`. 

```csharp
public UniTask<int> WrapByUniTaskCompletionSource()
{
    var utcs = new UniTaskCompletionSource<int>();

    // when complete, call utcs.TrySetResult();
    // when failed, call utcs.TrySetException();
    // when cancel, call utcs.TrySetCanceled();

    return utcs.Task; //return UniTask<int>
}
```

You can convert Task -> UniTask: `AsUniTask`, `UniTask` -> `UniTask<AsyncUnit>`: `AsAsyncUnitUniTask`, `UniTask<T>` -> `UniTask`: `AsUniTask`. `UniTask<T>` -> `UniTask`'s conversion cost is free.

If you want to convert async to coroutine, you can use `.ToCoroutine()`, this is useful if you want to only allow using the coroutine system.

UniTask 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) introduced in .NET Standard 2.1.

> The following operations should never be performed on a ValueTask<TResult> instance:
>
> * Awaiting the instance multiple times.
> * Calling AsTask multiple times.
> * Using .Result or .GetAwaiter().GetResult() when the operation hasn't yet completed, or using them multiple times.
> * Using more than one of these techniques to consume the instance.
>
> If you do any of the above, the results are undefined.

```csharp
var task = UniTask.DelayFrame(10);
await task;
await task; // NG, throws Exception
```

Store to the class field, you can use `UniTask.Lazy` that supports calling multiple times. `.Preserve()` allows for multiple calls (internally cached results). This is useful when there are multiple calls in a function scope.

Also `UniTaskCompletionSource` can await multiple times and await from many callers.

Cancellation and Exception handling
---
Some UniTask factory methods have a `CancellationToken cancellationToken = default` parameter. Also some async operations for Unity have `WithCancellation(CancellationToken)` and `ToUniTask(..., CancellationToken cancellation = default)` extension methods. 

You can pass `CancellationToken` to parameter by standard [`CancellationTokenSource`](https://docs.microsoft.com/en-us/dotnet/api/system.threading.cancellationtokensource).

```csharp
var cts = new CancellationTokenSource();

cancelButton.onClick.AddListener(() =>
{
    cts.Cancel();
});

await UnityWebRequest.Get("http://google.co.jp").SendWebRequest().WithCancellation(cts.Token);

await UniTask.DelayFrame(1000, cancellationToken: cts.Token);
```

CancellationToken can be created by `CancellationTokenSource` or MonoBehaviour's extension method `GetCancellationTokenOnDestroy`.

```csharp
// this CancellationToken lifecycle is same as GameObject.
await UniTask.DelayFrame(1000, cancellationToken: this.GetCancellationTokenOnDestroy());
```

For propagate Cancellation, all async method recommend to accept `CancellationToken cancellationToken` at last argument, and pass `CancellationToken` from root to end.

```csharp
await FooAsync(this.GetCancellationTokenOnDestroy());

// ---

async UniTask FooAsync(CancellationToken cancellationToken)
{
    await BarAsync(cancellationToken);
}

async UniTask BarAsync(CancellationToken cancellationToken)
{
    await UniTask.Delay(TimeSpan.FromSeconds(3), cancellationToken);
}
```

`CancellationToken` means lifecycle of async. You can hold your own lifecycle insteadof default CancellationTokenOnDestroy.

```csharp
public class MyBehaviour : MonoBehaviour
{
    CancellationTokenSource disableCancellation = new CancellationTokenSource();
    CancellationTokenSource destroyCancellation = new CancellationTokenSource();

    private void OnEnable()
    {
        if (disableCancellation != null)
        {
            disableCancellation.Dispose();
        }
        disableCancellation = new CancellationTokenSource();
    }

    private void OnDisable()
    {
        disableCancellation.Cancel();
    }

    private void OnDestroy()
    {
        destroyCancellation.Cancel();
        destroyCancellation.Dispose();
    }
}
```

After Unity 2022.2, Unity adds CancellationToken in [MonoBehaviour.destroyCancellationToken](https://docs.unity3d.com/ScriptReference/MonoBehaviour-destroyCancellationToken.html) and [Application.exitCancellationToken](https://docs.unity3d.com/ScriptReference/Application-exitCancellationToken.html).

When cancellation is detected, all methods throw `OperationCanceledException` and propagate upstream. When exception(not limited to `OperationCanceledException`) is not handled in async method, it is propagated finally to `UniTaskScheduler.UnobservedTaskException`. The default behaviour of received unhandled exception is to write log as exception. Log level can be changed using `UniTaskScheduler.UnobservedExceptionWriteLogType`. If you want to use custom behaviour, set an action to `UniTaskScheduler.UnobservedTaskException.`

And also `OperationCanceledException` is a special exception, this is silently ignored at `UnobservedTaskException`.

If you want to cancel behaviour in an async UniTask method, throw `OperationCanceledException` manually.

```csharp
public async UniTask<int> FooAsync()
{
    await UniTask.Yield();
    throw new OperationCanceledException();
}
```

If you handle an exception but want to ignore(propagate to global cancellation handling), use an exception filter.

```csharp
public async UniTask<int> BarAsync()
{
    try
    {
        var x = await FooAsync();
        return x * 2;
    }
    catch (Exception ex) when (!(ex is OperationCanceledException)) // when (ex is not OperationCanceledException) at C# 9.0
    {
        return -1;
    }
}
```

throws/catch `OperationCanceledException` is slightly heavy, so if performance is a concern, use `UniTask.SuppressCancellationThrow` to avoid OperationCanceledException throw. It returns `(bool IsCanceled, T Result)` instead of throwing.

```csharp
var (isCanceled, _) = await UniTask.DelayFrame(10, cancellationToken: cts.Token).SuppressCancellationThrow();
if (isCanceled)
{
    // ...
}
```

Note: Only suppress throws if you call directly into the most source method. Otherwise, the return value will be converted, but the entire pipeline will not suppress throws.

Some features that use Unity's player loop, such as `UniTask.Yield` and `UniTask.Delay` etc, determines CancellationToken state on the player loop. 
This means it does not cancel immediately upon `CancellationToken` fired. 

If you want to change this behaviour, the cancellation to be immediate, set the `cancelImmediately` flag as an argument.

```csharp
await UniTask.Yield(cancellationToken, cancelImmediately: true);
```

Note: Setting `cancelImmediately` to true and detecting an immediate cancellation is more costly than the default behavior.
This is because it uses `CancellationToken.Register`; it is heavier than checking CancellationToken on the player loop.

Timeout handling
---
Timeout is a variation of cancellation. You can set timeout by `CancellationTokenSouce.CancelAfterSlim(TimeSpan)` and pass CancellationToken to async methods.

```csharp
var cts = new CancellationTokenSource();
cts.CancelAfterSlim(TimeSpan.FromSeconds(5)); // 5sec timeout.

try
{
    await UnityWebRequest.Get("http://foo").SendWebRequest().WithCancellation(cts.Token);
}
catch (OperationCanceledException ex)
{
    if (ex.CancellationToken == cts.Token)
    {
        UnityEngine.Debug.Log("Timeout");
    }
}
```

> `CancellationTokenSouce.CancelAfter` is a standard api. However in Unity you should not use it because it depends threading timer. `CancelAfterSlim` is UniTask's extension methods, it uses PlayerLoop instead.

If you want to use timeout with other source of cancellation, use `CancellationTokenSource.CreateLinkedTokenSource`.

```csharp
var cancelToken = new CancellationTokenSource();
cancelButton.onClick.AddListener(() =>
{
    cancelToken.Cancel(); // cancel from button click.
});

var timeoutToken = new CancellationTokenSource();
timeoutToken.CancelAfterSlim(TimeSpan.FromSeconds(5)); // 5sec timeout.

try
{
    // combine token
    var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancelToken.Token, timeoutToken.Token);

    await UnityWebRequest.Get("http://foo").SendWebRequest().WithCancellation(linkedTokenSource.Token);
}
catch (OperationCanceledException ex)
{
    if (timeoutToken.IsCancellationRequested)
    {
        UnityEngine.Debug.Log("Timeout.");
    }
    else if (cancelToken.IsCancellationRequested)
    {
        UnityEngine.Debug.Log("Cancel clicked.");
    }
}
```

Optimize for reduce allocation of CancellationTokenSource for timeout per call async method, you can use UniTask's `TimeoutController`.

```csharp
TimeoutController timeoutController = new TimeoutController(); // setup to field for reuse.

async UniTask FooAsync()
{
    try
    {
        // you can pass timeoutController.Timeout(TimeSpan) to cancellationToken.
        await UnityWebRequest.Get("http://foo").SendWebRequest()
            .WithCancellation(timeoutController.Timeout(TimeSpan.FromSeconds(5)));
        timeoutController.Reset(); // call Reset(Stop timeout timer and ready for reuse) when succeed.
    }
    catch (OperationCanceledException ex)
    {
        if (timeoutController.IsTimeout())
        {
            UnityEngine.Debug.Log("timeout");
        }
    }
}
```

If you want to use timeout with other source of cancellation, use `new TimeoutController(CancellationToken)`.

```csharp
TimeoutController timeoutController;
CancellationTokenSource clickCancelSource;

void Start()
{
    this.clickCancelSource = new CancellationTokenSource();
    this.timeoutController = new TimeoutController(clickCancelSource);
}
```

Note: UniTask has `.Timeout`, `.TimeoutWithoutException` methods however, if possible, do not use these, please pass `CancellationToken`. Because `.Timeout` work from external of task, can not stop timeoutted task. `.Timeout` means ignore result when timeout. If you pass a `CancellationToken` to the method, it will act from inside of the task, so it is possible to stop a running task.

Progress
---
Some async operations for unity have `ToUniTask(IProgress<float> progress = null, ...)` extension methods. 

```csharp
var progress = Progress.Create<float>(x => Debug.Log(x));

var request = await UnityWebRequest.Get("http://google.co.jp")
    .SendWebRequest()
    .ToUniTask(progress: progress);
```

You should not use standard `new System.Progress<T>`, because it causes allocation every time. Use `Cysharp.Threading.Tasks.Progress` instead. This progress factory has two methods, `Create` and `CreateOnlyValueChanged`. `CreateOnlyValueChanged` calls only when the progress value has changed.

Implementing IProgress interface to caller is better as there is no lambda allocation.

```csharp
public class Foo : MonoBehaviour, IProgress<float>
{
    public void Report(float value)
    {
        UnityEngine.Debug.Log(value);
    }

    public async UniTaskVoid WebRequest()
    {
        var request = await UnityWebRequest.Get("http://google.co.jp")
            .SendWebRequest()
            .ToUniTask(progress: this); // pass this
    }
}
```

PlayerLoop
---
UniTask is run on a custom [PlayerLoop](https://docs.unity3d.com/ScriptReference/LowLevel.PlayerLoop.html). UniTask's playerloop based methods (such as `Delay`, `DelayFrame`, `asyncOperation.ToUniTask`, etc...) accept this `PlayerLoopTiming`.

```csharp
public enum PlayerLoopTiming
{
    Initialization = 0,
    LastInitialization = 1,

    EarlyUpdate = 2,
    LastEarlyUpdate = 3,

    FixedUpdate = 4,
    LastFixedUpdate = 5,

    PreUpdate = 6,
    LastPreUpdate = 7,

    Update = 8,
    LastUpdate = 9,

    PreLateUpdate = 10,
    LastPreLateUpdate = 11,

    PostLateUpdate = 12,
    LastPostLateUpdate = 13
    
#if UNITY_2020_2_OR_NEWER
    TimeUpdate = 14,
    LastTimeUpdate = 15,
#endif
}
```

It indicates when to run, you can check [PlayerLoopList.md](https://gist.github.com/neuecc/bc3a1cfd4d74501ad057e49efcd7bdae) to Unity's default playerloop and injected UniTask's custom loop.

`PlayerLoopTiming.Update` is similar to `yield return null` in a coroutine, but it is called before Update(Update and uGUI events(button.onClick, etc...) are called on `ScriptRunBehaviourUpdate`, yield return null is called on `ScriptRunDelayedDynamicFrameRate`). `PlayerLoopTiming.FixedUpdate` is similar to `WaitForFixedUpdate`.

> `PlayerLoopTiming.LastPostLateUpdate` is not equivalent to coroutine's `yield return new WaitForEndOfFrame()`. Coroutine's WaitForEndOfFrame seems to run after the PlayerLoop is done. Some methods that require coroutine's end of frame(`Texture2D.ReadPixels`, `ScreenCapture.CaptureScreenshotAsTexture`, `CommandBuffer`, etc) do not work correctly when replaced with async/await. In these cases, pass MonoBehaviour(coroutine runnner) to `UniTask.WaitForEndOfFrame`. For example, `await UniTask.WaitForEndOfFrame(this);` is lightweight allocation free alternative of `yield return new WaitForEndOfFrame()`.
> 
> Note: In Unity 2023.1 or newer, `await UniTask.WaitForEndOfFrame();` no longer requires MonoBehaviour. It uses `UnityEngine.Awaitable.EndOfFrameAsync`.

`yield return null` and `UniTask.Yield` are similar but different. `yield return null` always returns next frame but `UniTask.Yield` returns next called. That is, call `UniTask.Yield(PlayerLoopTiming.Update)` on `PreUpdate`, it returns same frame. `UniTask.NextFrame()` guarantees return next frame, you can expect this to behave exactly the same as `yield return null`.

> UniTask.Yield(without CancellationToken) is a special type, returns `YieldAwaitable` and runs on YieldRunner. It is the most lightweight and fastest.

`AsyncOperation` is returned from native timing. For example, await `SceneManager.LoadSceneAsync` is returned from `EarlyUpdate.UpdatePreloading` and after being called, the loaded scene's `Start` is called from `EarlyUpdate.ScriptRunDelayedStartupFrame`. Also `await UnityWebRequest` is returned from `EarlyUpdate.ExecuteMainThreadJobs`.

In UniTask, await directly uses native timing, while `WithCancellation` and `ToUniTask` use specified timing. This is usually not a particular problem, but with `LoadSceneAsync`, it causes a different order of Start and continuation after await. So it is recommended not to use `LoadSceneAsync.ToUniTask`.

> Note: When using Unity 2023.1 or newer, ensure you have `using UnityEngine;` in the using statements of your file when working with new `UnityEngine.Awaitable` methods like `SceneManager.LoadSceneAsync`. 
> This prevents compilation errors by avoiding the use of the `UnityEngine.AsyncOperation` version.

In the stacktrace, you can check where it is running in playerloop.

![image](https://user-images.githubusercontent.com/46207/83735571-83caea80-a68b-11ea-8d22-5e22864f0d24.png)

By default, UniTask's PlayerLoop is initialized at `[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]`.

The order in which methods are called in BeforeSceneLoad is nondeterministic, so if you want to use UniTask in other BeforeSceneLoad methods, you should try to initialize it before this.

```csharp
// AfterAssembliesLoaded is called before BeforeSceneLoad
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)]
public static void InitUniTaskLoop()
{
    var loop = PlayerLoop.GetCurrentPlayerLoop();
    Cysharp.Threading.Tasks.PlayerLoopHelper.Initialize(ref loop);
}
```

If you import Unity's `Entities` package, that resets the custom player loop to default at `BeforeSceneLoad` and injects ECS's loop. When Unity calls ECS's inject method after UniTask's initialize method, UniTask will no longer work.

To solve this issue, you can re-initialize the UniTask PlayerLoop after ECS is initialized.

```csharp
// Get ECS Loop.
var playerLoop = ScriptBehaviourUpdateOrder.CurrentPlayerLoop;

// Setup UniTask's PlayerLoop.
PlayerLoopHelper.Initialize(ref playerLoop);
```

You can diagnose whether UniTask's player loop is ready by calling `PlayerLoopHelper.IsInjectedUniTaskPlayerLoop()`. And also `PlayerLoopHelper.DumpCurrentPlayerLoop` logs all current playerloops to console.

```csharp
void Start()
{
    UnityEngine.Debug.Log("UniTaskPlayerLoop ready? " + PlayerLoopHelper.IsInjectedUniTaskPlayerLoop());
    PlayerLoopHelper.DumpCurrentPlayerLoop();
}
```

You can optimize loop cost slightly by remove unuse PlayerLoopTiming injection. You can call `PlayerLoopHelper.Initialize(InjectPlayerLoopTimings)` on initialize.

```csharp
var loop = PlayerLoop.GetCurrentPlayerLoop();
PlayerLoopHelper.Initialize(ref loop, InjectPlayerLoopTimings.Minimum); // minimum is Update | FixedUpdate | LastPostLateUpdate
```

`InjectPlayerLoopTimings` has three preset, `All` and `Standard`(All without last except LastPostLateUpdate), `Minimum`(`Update | FixedUpdate | LastPostLateUpdate`). Default is All and you can combine custom inject timings like `InjectPlayerLoopTimings.Update | InjectPlayerLoopTimings.FixedUpdate | InjectPlayerLoopTimings.PreLateUpdate`.

You can make error to use uninjected `PlayerLoopTiming` by [Microsoft.CodeAnalysis.BannedApiAnalyzers](https://github.com/dotnet/roslyn-analyzers/blob/master/src/Microsoft.CodeAnalysis.BannedApiAnalyzers/BannedApiAnalyzers.Help.md). For example, you can setup `BannedSymbols.txt` like this for `InjectPlayerLoopTimings.Minimum`.

```txt
F:Cysharp.Threading.Tasks.PlayerLoopTiming.Initialization; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.LastInitialization; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.EarlyUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.LastEarlyUpdate; Isn't injected this PlayerLoop in this project.d
F:Cysharp.Threading.Tasks.PlayerLoopTiming.LastFixedUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.PreUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.LastPreUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.LastUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.PreLateUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.LastPreLateUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.PostLateUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.TimeUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.LastTimeUpdate; Isn't injected this PlayerLoop in this project.
```

You can configure `RS0030` severity to error.

![image](https://user-images.githubusercontent.com/46207/109150837-bb933880-77ac-11eb-85ba-4fd15819dbd0.png)

async void vs async UniTaskVoid
---
`async void` is a standard C# task system so it does not run on UniTask systems. It is better not to use it. `async UniTaskVoid` is a lightweight version of `async UniTask` because it does not have awaitable completion and reports errors immediately to `UniTaskScheduler.UnobservedTaskException`. If you don't require awaiting (fire and forget), using `UniTaskVoid` is better. Unfortunately to dismiss warning, you're required to call `Forget()`.

```csharp
public async UniTaskVoid FireAndForgetMethod()
{
    // do anything...
    await UniTask.Yield();
}

public void Caller()
{
    FireAndForgetMethod().Forget();
}
```

Also UniTask has the `Forget` method, it is similar to `UniTaskVoid` and has the same effects. However `UniTaskVoid` is more efficient if you completely don't use `await`。

```csharp
public async UniTask DoAsync()
{
    // do anything...
    await UniTask.Yield();
}

public void Caller()
{
    DoAsync().Forget();
}
```

To use an async lambda registered to an event, don't use `async void`. Instead you can use `UniTask.Action` or `UniTask.UnityAction`, both of which create a delegate via `async UniTaskVoid` lambda.

```csharp
Action actEvent;
UnityAction unityEvent; // especially used in uGUI

// Bad: async void
actEvent += async () => { };
unityEvent += async () => { };

// Ok: create Action delegate by lambda
actEvent += UniTask.Action(async () => { await UniTask.Yield(); });
unityEvent += UniTask.UnityAction(async () => { await UniTask.Yield(); });
```

`UniTaskVoid` can also be used in MonoBehaviour's `Start` method.

```csharp
class Sample : MonoBehaviour
{
    async UniTaskVoid Start()
    {
        // async init code.
    }
}
```

UniTaskTracker
---
useful for checking (leaked) UniTasks. You can open tracker window in `Window -> UniTask Tracker`.

![image](https://user-images.githubusercontent.com/46207/83527073-4434bf00-a522-11ea-86e9-3b3975b26266.png)

* Enable AutoReload(Toggle) - Reload automatically.
* Reload - Reload view.
* GC.Collect - Invoke GC.Collect.
* Enable Tracking(Toggle) - Start to track async/await UniTask. Performance impact: low.
* Enable StackTrace(Toggle) - Capture StackTrace when task is started. Performance impact: high.

UniTaskTracker is intended for debugging use only as enabling tracking and capturing stacktraces is useful but has a heavy performance impact. Recommended usage is to enable both tracking and stacktraces to find task leaks and to disable them both when done.

External Assets
---
By default, UniTask supports TextMeshPro(`BindTo(TMP_Text)` and `TMP_InputField` event extensions like standard uGUI `InputField`), DOTween(`Tween` as awaitable) and Addressables(`AsyncOperationHandle` and `AsyncOperationHandle<T>` as awaitable).

There are defined in separated asmdefs like `UniTask.TextMeshPro`, `UniTask.DOTween`, `UniTask.Addressables`.

TextMeshPro and Addressables support are automatically enabled when importing their packages from package manager. 
However for DOTween support, after importing from the [DOTWeen assets](https://assetstore.unity.com/packages/tools/animation/dotween-hotween-v2-27676r) and define the scripting define symbol `UNITASK_DOTWEEN_SUPPORT` to enable it.

```csharp
// sequential
await transform.DOMoveX(2, 10);
await transform.DOMoveZ(5, 20);

// parallel with cancellation
var ct = this.GetCancellationTokenOnDestroy();

await UniTask.WhenAll(
    transform.DOMoveX(10, 3).WithCancellation(ct),
    transform.DOScale(10, 3).WithCancellation(ct));
```

DOTween support's default behaviour(`await`, `WithCancellation`, `ToUniTask`) awaits tween is killed. It works on both Complete(true/false) and Kill(true/false). But if you want to reuse tweens (`SetAutoKill(false)`), it does not work as expected. If you want to await for another timing, the following extension methods exist in Tween, `AwaitForComplete`, `AwaitForPause`, `AwaitForPlay`, `AwaitForRewind`, `AwaitForStepComplete`.

AsyncEnumerable and Async LINQ
---
Unity 2020.2 supports C# 8.0 so you can use `await foreach`. This is the new Update notation in the async era.

```csharp
// Unity 2020.2, C# 8.0
await foreach (var _ in UniTaskAsyncEnumerable.EveryUpdate().WithCancellation(token))
{
    Debug.Log("Update() " + Time.frameCount);
}
```

In a C# 7.3 environment, you can use the `ForEachAsync` method to work in almost the same way.

```csharp
// C# 7.3(Unity 2018.3~)
await UniTaskAsyncEnumerable.EveryUpdate().ForEachAsync(_ =>
{
    Debug.Log("Update() " + Time.frameCount);
}, token);
```

`UniTask.WhenEach` that is similar to .NET 9's `Task.WhenEach` can consume new way for await multiple tasks.

```csharp
await foreach (var result in UniTask.WhenEach(task1, task2, task3))
{
    // The result is of type WhenEachResult<T>.
    // It contains either `T Result` or `Exception Exception`.
    // You can check `IsCompletedSuccessfully` or `IsFaulted` to determine whether to access `.Result` or `.Exception`.
    // If you want to throw an exception when `IsFaulted` and retrieve the result when successful, use `GetResult()`.
    Debug.Log(result.GetResult());
}
```

UniTaskAsyncEnumerable implements asynchronous LINQ, similar to LINQ in `IEnumerable<T>` or Rx in `IObservable<T>`. All standard LINQ query operators can be applied to asynchronous streams. For example, the following code shows how to apply a Where filter to a button-click asynchronous stream that runs once every two clicks.

```csharp
await okButton.OnClickAsAsyncEnumerable().Where((x, i) => i % 2 == 0).ForEachAsync(_ =>
{
});
```

Fire and Forget style(for example, event handling), you can also use `Subscribe`.

```csharp
okButton.OnClickAsAsyncEnumerable().Where((x, i) => i % 2 == 0).Subscribe(_ =>
{
});
```

Async LINQ is enabled when `using Cysharp.Threading.Tasks.Linq;`, and `UniTaskAsyncEnumerable` is defined in `UniTask.Linq` asmdef.

It's closer to UniRx (Reactive Extensions), but UniTaskAsyncEnumerable is a pull-based asynchronous stream, whereas Rx was a push-based asynchronous stream. Note that although similar, the characteristics are different and the details behave differently along with them.

`UniTaskAsyncEnumerable` is the entry point like `Enumerable`. In addition to the standard query operators, there are other generators for Unity such as `EveryUpdate`, `Timer`, `TimerFrame`, `Interval`, `IntervalFrame`, and `EveryValueChanged`. And also added additional UniTask original query operators like `Append`, `Prepend`, `DistinctUntilChanged`, `ToHashSet`, `Buffer`, `CombineLatest`,`Merge` `Do`, `Never`, `ForEachAsync`, `Pairwise`, `Publish`, `Queue`, `Return`, `SkipUntil`, `TakeUntil`, `SkipUntilCanceled`, `TakeUntilCanceled`, `TakeLast`, `Subscribe`.

The method with Func as an argument has three additional overloads, `***Await`, `***AwaitWithCancellation`.

```csharp
Select(Func<T, TR> selector)
SelectAwait(Func<T, UniTask<TR>> selector)
SelectAwaitWithCancellation(Func<T, CancellationToken, UniTask<TR>> selector)
```

If you want to use the `async` method inside the func, use the `***Await` or `***AwaitWithCancellation`.

How to create an async iterator: C# 8.0 supports async iterator(`async yield return`) but it only allows `IAsyncEnumerable<T>` and of course requires C# 8.0. UniTask supports `UniTaskAsyncEnumerable.Create` method to create custom async iterator.

```csharp
// IAsyncEnumerable, C# 8.0 version of async iterator. ( do not use this style, IAsyncEnumerable is not controled in UniTask).
public async IAsyncEnumerable<int> MyEveryUpdate([EnumeratorCancellation]CancellationToken cancelationToken = default)
{
    var frameCount = 0;
    await UniTask.Yield();
    while (!token.IsCancellationRequested)
    {
        yield return frameCount++;
        await UniTask.Yield();
    }
}

// UniTaskAsyncEnumerable.Create and use `await writer.YieldAsync` instead of `yield return`.
public IUniTaskAsyncEnumerable<int> MyEveryUpdate()
{
    // writer(IAsyncWriter<T>) has `YieldAsync(value)` method.
    return UniTaskAsyncEnumerable.Create<int>(async (writer, token) =>
    {
        var frameCount = 0;
        await UniTask.Yield();
        while (!token.IsCancellationRequested)
        {
            await writer.YieldAsync(frameCount++); // instead of `yield return`
            await UniTask.Yield();
        }
    });
}
```

Awaitable Events
---
All uGUI component implements `***AsAsyncEnumerable` to convert asynchronous streams of events.

```csharp
async UniTask TripleClick()
{
    // In default, used button.GetCancellationTokenOnDestroy to manage lieftime of async
    await button.OnClickAsync();
    await button.OnClickAsync();
    await button.OnClickAsync();
    Debug.Log("Three times clicked");
}

// more efficient way
async UniTask TripleClick()
{
    using (var handler = button.GetAsyncClickEventHandler())
    {
        await handler.OnClickAsync();
        await handler.OnClickAsync();
        await handler.OnClickAsync();
        Debug.Log("Three times clicked");
    }
}

// use async LINQ
async UniTask TripleClick(CancellationToken token)
{
    await button.OnClickAsAsyncEnumerable().Take(3).Last();
    Debug.Log("Three times clicked");
}

// use async LINQ2
async UniTask TripleClick(CancellationToken token)
{
    await button.OnClickAsAsyncEnumerable().Take(3).ForEachAsync(_ =>
    {
        Debug.Log("Every clicked");
    });
    Debug.Log("Three times clicked, complete.");
}
```

All MonoBehaviour message events can convert async-streams by `AsyncTriggers` that can be enabled by `using Cysharp.Threading.Tasks.Triggers;`. AsyncTrigger can be created using `GetAsync***Trigger` and triggers itself as UniTaskAsyncEnumerable.

```csharp
var trigger = this.GetOnCollisionEnterAsyncHandler();
await trigger.OnCollisionEnterAsync();
await trigger.OnCollisionEnterAsync();
await trigger.OnCollisionEnterAsync();

// every moves.
await this.GetAsyncMoveTrigger().ForEachAsync(axisEventData =>
{
});
```

`AsyncReactiveProperty`, `AsyncReadOnlyReactiveProperty` is UniTask's version of ReactiveProperty. `BindTo` extension method of `IUniTaskAsyncEnumerable<T>` for binding asynchronous stream values to Unity components(Text/Selectable/TMP/Text).

```csharp
var rp = new AsyncReactiveProperty<int>(99);

// AsyncReactiveProperty itself is IUniTaskAsyncEnumerable, you can query by LINQ
rp.ForEachAsync(x =>
{
    Debug.Log(x);
}, this.GetCancellationTokenOnDestroy()).Forget();

rp.Value = 10; // push 10 to all subscriber
rp.Value = 11; // push 11 to all subscriber

// WithoutCurrent ignore initial value
// BindTo bind stream value to unity components.
rp.WithoutCurrent().BindTo(this.textComponent);

await rp.WaitAsync(); // wait until next value set

// also exists ToReadOnlyAsyncReactiveProperty
var rp2 = new AsyncReactiveProperty<int>(99);
var rorp = rp.CombineLatest(rp2, (x, y) => (x, y)).ToReadOnlyAsyncReactiveProperty(CancellationToken.None);
```

A pull-type asynchronous stream does not get the next values until the asynchronous processing in the sequence is complete. This could spill data from push-type events such as buttons.

```csharp
// can not get click event during 3 seconds complete.
await button.OnClickAsAsyncEnumerable().ForEachAwaitAsync(async x =>
{
    await UniTask.Delay(TimeSpan.FromSeconds(3));
});
```

It is useful (prevent double-click) but not useful sometimes.

Using the `Queue()` method will also queue events during asynchronous processing.

```csharp
// queued message in asynchronous processing
await button.OnClickAsAsyncEnumerable().Queue().ForEachAwaitAsync(async x =>
{
    await UniTask.Delay(TimeSpan.FromSeconds(3));
});
```

Or use `Subscribe`, fire and forget style.

```csharp
button.OnClickAsAsyncEnumerable().Subscribe(async x =>
{
    await UniTask.Delay(TimeSpan.FromSeconds(3));
});
```

Channel
---
`Channel` is the same as [System.Threading.Tasks.Channels](https://docs.microsoft.com/en-us/dotnet/api/system.threading.channels?view=netcore-3.1) which is similar to a GoLang Channel.

Currently it only supports multiple-producer, single-consumer unbounded channels. It can create by `Channel.CreateSingleConsumerUnbounded<T>()`.

For producer(`.Writer`), use `TryWrite` to push value and `TryComplete` to complete channel. For consumer(`.Reader`), use `TryRead`, `WaitToReadAsync`, `ReadAsync`, `Completion` and `ReadAllAsync` to read queued messages.

`ReadAllAsync` returns `IUniTaskAsyncEnumerable<T>` so query LINQ operators. Reader only allows single-consumer but uses `.Publish()` query operator to enable multicast message. For example, make pub/sub utility.

```csharp
public class AsyncMessageBroker<T> : IDisposable
{
    Channel<T> channel;

    IConnectableUniTaskAsyncEnumerable<T> multicastSource;
    IDisposable connection;

    public AsyncMessageBroker()
    {
        channel = Channel.CreateSingleConsumerUnbounded<T>();
        multicastSource = channel.Reader.ReadAllAsync().Publish();
        connection = multicastSource.Connect(); // Publish returns IConnectableUniTaskAsyncEnumerable.
    }

    public void Publish(T value)
    {
        channel.Writer.TryWrite(value);
    }

    public IUniTaskAsyncEnumerable<T> Subscribe()
    {
        return multicastSource;
    }

    public void Dispose()
    {
        channel.Writer.TryComplete();
        connection.Dispose();
    }
}
```

vs Awaitable
---
Unity 6 introduces the awaitable type, [Awaitable](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Awaitable.html). To put it simply, Awaitable can be considered a subset of UniTask, and in fact, Awaitable's design was influenced by UniTask. It should be able to handle PlayerLoop-based awaits, pooled Tasks, and support for cancellation with `CancellationToken` in a similar way. With its inclusion in the standard library, you may wonder whether to continue using UniTask or migrate to Awaitable. Here's a brief guide.

First, the functionality provided by Awaitable is equivalent to what coroutines offer. Instead of `yield return`, you use await; `await NextFrameAsync()` replaces `yield return null`; and there are equivalents for `WaitForSeconds` and `EndOfFrame`. However, that's the extent of it. Being coroutine-based in terms of functionality, it lacks Task-based features. In practical application development using async/await, operations like `WhenAll` are essential. Additionally, UniTask enables many frame-based operations (such as `DelayFrame`) and more flexible PlayerLoopTiming control, which are not available in Awaitable. Of course, there's no Tracker Window either.

Therefore, I recommend using UniTask for application development. UniTask is a superset of Awaitable and includes many essential features. For library development, where you want to avoid external dependencies, using Awaitable as a return type for methods would be appropriate. Awaitable can be converted to UniTask using `AsUniTask`, so there's no issue in handling Awaitable-based functionality within the UniTask library. Of course, if you don't need to worry about dependencies, using UniTask would be the best choice even for library development.

For Unit Testing
---
Unity's `[UnityTest]` attribute can test coroutine(IEnumerator) but can not test async. `UniTask.ToCoroutine` bridges async/await to coroutine so you can test async methods.

```csharp
[UnityTest]
public IEnumerator DelayIgnore() => UniTask.ToCoroutine(async () =>
{
    var time = Time.realtimeSinceStartup;

    Time.timeScale = 0.5f;
    try
    {
        await UniTask.Delay(TimeSpan.FromSeconds(3), ignoreTimeScale: true);

        var elapsed = Time.realtimeSinceStartup - time;
        Assert.AreEqual(3, (int)Math.Round(TimeSpan.FromSeconds(elapsed).TotalSeconds, MidpointRounding.ToEven));
    }
    finally
    {
        Time.timeScale = 1.0f;
    }
});
```

UniTask's own unit tests are written using Unity Test Runner and [Cysharp/RuntimeUnitTestToolkit](https://github.com/Cysharp/RuntimeUnitTestToolkit) to integrate with CI and check if IL2CPP is working.

ThreadPool limitation
---
Most UniTask methods run on a single thread (PlayerLoop), with only `UniTask.Run`(`Task.Run` equivalent) and `UniTask.SwitchToThreadPool` running on a thread pool. If you use a thread pool, it won't work with WebGL and so on.

`UniTask.Run` is now deprecated. You can use `UniTask.RunOnThreadPool` instead. And also consider whether you can use `UniTask.Create` or `UniTask.Void`.

IEnumerator.ToUniTask limitation
---
You can convert coroutine(IEnumerator) to UniTask(or await directly) but it has some limitations.

* `WaitForEndOfFrame`/`WaitForFixedUpdate`/`Coroutine` is not supported.
* Consuming loop timing is not the same as `StartCoroutine`, it uses the specified `PlayerLoopTiming` and the default `PlayerLoopTiming.Update` is run before MonoBehaviour's `Update` and `StartCoroutine`'s loop.

If you want fully compatible conversion from coroutine to async, use the `IEnumerator.ToUniTask(MonoBehaviour coroutineRunner)` overload. It executes StartCoroutine on an instance of the argument MonoBehaviour and waits for it to complete in UniTask.

For UnityEditor
---
UniTask can run on Unity Editor like an Editor Coroutine. However, there are some limitations.

* UniTask.Delay's DelayType.DeltaTime, UnscaledDeltaTime do not work correctly because they can not get deltaTime in editor. Therefore run on EditMode, automatically change DelayType to `DelayType.Realtime` that wait for the right time.
* All PlayerLoopTiming run on the timing `EditorApplication.update`.
* `-batchmode` with `-quit` does not work because Unity does not run `EditorApplication.update` and quit after a single frame. Instead, don't use `-quit` and quit manually with `EditorApplication.Exit(0)`.

Compare with Standard Task API
---
UniTask has many standard Task-like APIs. This table shows what the alternative apis are.

Use standard type.

| .NET Type | UniTask Type | 
| --- | --- |
| `IProgress<T>` | --- |
| `CancellationToken` | --- | 
| `CancellationTokenSource` | --- |

Use UniTask type.

| .NET Type | UniTask Type | 
| --- | --- |
| `Task`/`ValueTask` | `UniTask` |
| `Task<T>`/`ValueTask<T>` | `UniTask<T>` |
| `async void` | `async UniTaskVoid` | 
| `+= async () => { }` | `UniTask.Void`, `UniTask.Action`, `UniTask.UnityAction` |
| --- | `UniTaskCompletionSource` |
| `TaskCompletionSource<T>` | `UniTaskCompletionSource<T>`/`AutoResetUniTaskCompletionSource<T>` |
| `ManualResetValueTaskSourceCore<T>` | `UniTaskCompletionSourceCore<T>` |
| `IValueTaskSource` | `IUniTaskSource` |
| `IValueTaskSource<T>` | `IUniTaskSource<T>` |
| `ValueTask.IsCompleted` | `UniTask.Status.IsCompleted()` |
| `ValueTask<T>.IsCompleted` | `UniTask<T>.Status.IsCompleted()` |
| `new Progress<T>` | `Progress.Create<T>` |
| `CancellationToken.Register(UnsafeRegister)` | `CancellationToken.RegisterWithoutCaptureExecutionContext` |
| `CancellationTokenSource.CancelAfter` | `CancellationTokenSource.CancelAfterSlim` |
| `Channel.CreateUnbounded<T>(false){ SingleReader = true }` | `Channel.CreateSingleConsumerUnbounded<T>` |
| `IAsyncEnumerable<T>` | `IUniTaskAsyncEnumerable<T>` |
| `IAsyncEnumerator<T>` | `IUniTaskAsyncEnumerator<T>` |
| `IAsyncDisposable` | `IUniTaskAsyncDisposable` |
| `Task.Delay` | `UniTask.Delay` |
| `Task.Yield` | `UniTask.Yield` |
| `Task.Run` | `UniTask.RunOnThreadPool` |
| `Task.WhenAll` | `UniTask.WhenAll` |
| `Task.WhenAny` | `UniTask.WhenAny` |
| `Task.WhenEach` | `UniTask.WhenEach` |
| `Task.CompletedTask` | `UniTask.CompletedTask` |
| `Task.FromException` | `UniTask.FromException` |
| `Task.FromResult` | `UniTask.FromResult` |
| `Task.FromCanceled` | `UniTask.FromCanceled` |
| `Task.ContinueWith` | `UniTask.ContinueWith` |
| `TaskScheduler.UnobservedTaskException` | `UniTaskScheduler.UnobservedTaskException` |

Pooling Configuration
---
UniTask aggressively caches async promise objects to achieve zero allocation (for technical details, see blog post [UniTask v2 — Zero Allocation async/await for Unity, with Asynchronous LINQ](https://medium.com/@neuecc/unitask-v2-zero-allocation-async-await-for-unity-with-asynchronous-linq-1aa9c96aa7dd)). By default, it caches all promises but you can configure `TaskPool.SetMaxPoolSize` to your value, the value indicates cache size per type. `TaskPool.GetCacheSizeInfo` returns currently cached objects in pool.

```csharp
foreach (var (type, size) in TaskPool.GetCacheSizeInfo())
{
    Debug.Log(type + ":" + size);
}
```

Allocation on Profiler
---
In UnityEditor the profiler shows allocation of compiler generated AsyncStateMachine but it only occurs in debug(development) build. C# Compiler generates AsyncStateMachine as class on Debug build and as struct on Release build.

Unity supports Code Optimization option starting in 2020.1 (right, footer).

![](https://user-images.githubusercontent.com/46207/89967342-2f944600-dc8c-11ea-99fc-0b74527a16f6.png)

You can change C# compiler optimization to release to remove AsyncStateMachine allocation in development builds. This optimization option can also be set via `Compilation.CompilationPipeline-codeOptimization`, and `Compilation.CodeOptimization`.

UniTaskSynchronizationContext
---
Unity's default SynchronizationContext(`UnitySynchronizationContext`) is a poor implementation for performance. UniTask bypasses `SynchronizationContext`(and `ExecutionContext`) so it does not use it but if exists in `async Task`, still used it. `UniTaskSynchronizationContext` is a replacement of `UnitySynchronizationContext` which is better for performance.

```csharp
public class SyncContextInjecter
{
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
    public static void Inject()
    {
        SynchronizationContext.SetSynchronizationContext(new UniTaskSynchronizationContext());
    }
}
```

This is an optional choice and is not always recommended; `UniTaskSynchronizationContext` is less performant than `async UniTask` and is not a complete UniTask replacement. It also does not guarantee full behavioral compatibility with the `UnitySynchronizationContext`.

API References
---
UniTask's API References are hosted at [cysharp.github.io/UniTask](https://cysharp.github.io/UniTask/api/Cysharp.Threading.Tasks.html) by [DocFX](https://dotnet.github.io/docfx/) and [Cysharp/DocfXTemplate](https://github.com/Cysharp/DocfxTemplate).

For example, UniTask's factory methods can be seen at [UniTask#methods](https://cysharp.github.io/UniTask/api/Cysharp.Threading.Tasks.UniTask.html#methods-1). UniTaskAsyncEnumerable's factory/extension methods can be seen at [UniTaskAsyncEnumerable#methods](https://cysharp.github.io/UniTask/api/Cysharp.Threading.Tasks.Linq.UniTaskAsyncEnumerable.html#methods-1).

UPM Package
---
### Install via git URL

Requires a version of unity that supports path query parameter for git packages (Unity >= 2019.3.4f1, Unity >= 2020.1a21). You can add `https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask` to Package Manager

![image](https://user-images.githubusercontent.com/46207/79450714-3aadd100-8020-11ea-8aae-b8d87fc4d7be.png)

![image](https://user-images.githubusercontent.com/46207/83702872-e0f17c80-a648-11ea-8183-7469dcd4f810.png)

or add `"com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask"` to `Packages/manifest.json`.

If you want to set a target version, UniTask uses the `*.*.*` release tag so you can specify a version like `#2.1.0`. For example `https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#2.1.0`.


.NET Core
---
For .NET Core, use NuGet.

> PM> Install-Package [UniTask](https://www.nuget.org/packages/UniTask)

UniTask of .NET Core version is a subset of Unity UniTask with PlayerLoop dependent methods removed.

It runs at higher performance than the standard Task/ValueTask, but you should be careful to ignore the ExecutionContext/SynchronizationContext when using it. `AsyncLocal` also does not work because it ignores ExecutionContext.

If you use UniTask internally, but provide ValueTask as an external API, you can write it like the following(Inspired by [PooledAwait](https://github.com/mgravell/PooledAwait)).

```csharp
public class ZeroAllocAsyncAwaitInDotNetCore
{
    public ValueTask<int> DoAsync(int x, int y)
    {
        return Core(this, x, y);

        static async UniTask<int> Core(ZeroAllocAsyncAwaitInDotNetCore self, int x, int y)
        {
            // do anything...
            await Task.Delay(TimeSpan.FromSeconds(x + y));
            await UniTask.Yield();

            return 10;
        }
    }
}

// UniTask does not return to original SynchronizationContext but you can use helper `ReturnToCurrentSynchronizationContext`.
public ValueTask TestAsync()
{
    await using (UniTask.ReturnToCurrentSynchronizationContext())
    {
        await UniTask.SwitchToThreadPool();
        // do anything..
    }
}
```

.NET Core version is intended to allow users to use UniTask as an interface when sharing code with Unity (such as [Cysharp/MagicOnion](https://github.com/Cysharp/MagicOnion/)). .NET Core version of UniTask enables smooth code sharing.

Utility methods such as WhenAll which are equivalent to UniTask are provided as [Cysharp/ValueTaskSupplement](https://github.com/Cysharp/ValueTaskSupplement).

License
---
This library is under the MIT License.


================================================
FILE: README_CN.md
================================================
UniTask
===
[![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)

为Unity提供一个高性能,零堆内存分配的 async/await 异步方案。

- 基于值类型的`UniTask<T>`和自定义的 AsyncMethodBuilder 来实现零堆内存分配
- 使所有 Unity 的 AsyncOperations 和 Coroutines 可等待
- 基于 PlayerLoop 的任务(`UniTask.Yield`,`UniTask.Delay`,`UniTask.DelayFrame`等..)可以替换所有协程操作
- 对 MonoBehaviour 消息事件和 uGUI 事件进行可等待/异步枚举扩展
- 完全在 Unity 的 PlayerLoop 上运行,因此不使用Thread,并且同样能在 WebGL、wasm 等平台上运行。
- 带有 Channel 和 AsyncReactiveProperty 的异步 LINQ
- 提供一个 TaskTracker EditorWindow 以追踪所有 UniTask 分配来预防内存泄漏
- 与原生 Task/ValueTask/IValueTaskSource 高度兼容的行为

有关技术细节,请参阅博客文章:[UniTask v2 — 适用于 Unity 的零堆内存分配的async/await,支持异步 LINQ](https://medium.com/@neuecc/unitask-v2-zero-allocation-async-await-for-unity-with-asynchronous-linq-1aa9c96aa7dd)  
有关高级技巧,请参阅博客文章:[通过异步装饰器模式扩展 UnityWebRequest — UniTask 的高级技术](https://medium.com/@neuecc/extends-unitywebrequest-via-async-decorator-pattern-advanced-techniques-of-unitask-ceff9c5ee846)

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
## 目录

- [入门](#%E5%85%A5%E9%97%A8)
- [UniTask 和 AsyncOperation 的基础知识](#unitask-%E5%92%8C-asyncoperation-%E7%9A%84%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86)
- [取消和异常处理](#%E5%8F%96%E6%B6%88%E5%92%8C%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86)
- [超时处理](#%E8%B6%85%E6%97%B6%E5%A4%84%E7%90%86)
- [进度](#%E8%BF%9B%E5%BA%A6)
- [PlayerLoop](#playerloop)
- [async void 与 async UniTaskVoid 对比](#async-void-%E4%B8%8E-async-unitaskvoid-%E5%AF%B9%E6%AF%94)
- [UniTaskTracker](#unitasktracker)
- [外部拓展](#%E5%A4%96%E9%83%A8%E6%8B%93%E5%B1%95)
- [AsyncEnumerable 和 Async LINQ](#asyncenumerable-%E5%92%8C-async-linq)
- [可等待事件](#%E5%8F%AF%E7%AD%89%E5%BE%85%E4%BA%8B%E4%BB%B6)
- [Channel](#channel)
- [与 Awaitable 对比](#%E4%B8%8E-awaitable-%E5%AF%B9%E6%AF%94)
- [单元测试](#%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95)
- [线程池的限制](#%E7%BA%BF%E7%A8%8B%E6%B1%A0%E7%9A%84%E9%99%90%E5%88%B6)
- [IEnumerator.ToUniTask 的限制](#ienumeratortounitask-%E7%9A%84%E9%99%90%E5%88%B6)
- [关于 UnityEditor](#%E5%85%B3%E4%BA%8E-unityeditor)
- [与原生 Task API 对比](#%E4%B8%8E%E5%8E%9F%E7%94%9F-task-api-%E5%AF%B9%E6%AF%94)
- [池化配置](#%E6%B1%A0%E5%8C%96%E9%85%8D%E7%BD%AE)
- [Profiler 下的堆内存分配](#profiler-%E4%B8%8B%E7%9A%84%E5%A0%86%E5%86%85%E5%AD%98%E5%88%86%E9%85%8D)
- [UniTaskSynchronizationContext](#unitasksynchronizationcontext)
- [API 文档](#api-%E6%96%87%E6%A1%A3)
- [UPM 包](#upm-%E5%8C%85)
- [通过 git URL 安装](#%E9%80%9A%E8%BF%87-git-url-%E5%AE%89%E8%A3%85)
- [关于 .NET Core](#%E5%85%B3%E4%BA%8E-net-core)
- [许可证](#%E8%AE%B8%E5%8F%AF%E8%AF%81)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

入门
---
通过[UniTask/releases](https://github.com/Cysharp/UniTask/releases)页面中提供的[UPM 包](https://github.com/Cysharp/UniTask#upm-package)或资产包(`UniTask.*.*.*.unitypackage`)安装。

```csharp
// 使用 UniTask 所需的命名空间
using Cysharp.Threading.Tasks;

// 您可以返回一个形如 UniTask<T>(或 UniTask) 的类型,这种类型事为Unity定制的,作为替代原生 Task<T> 的轻量级方案
// 为 Unity 集成的零堆内存分配,快速调用,0消耗的 async/await 方案
async UniTask<string> DemoAsync()
{
    // 您可以等待一个 Unity 异步对象
    var asset = await Resources.LoadAsync<TextAsset>("foo");
    var txt = (await UnityWebRequest.Get("https://...").SendWebRequest()).downloadHandler.text;
    await SceneManager.LoadSceneAsync("scene2");

    // .WithCancellation 会启用取消功能,GetCancellationTokenOnDestroy 表示获取一个依赖对象生命周期的 Cancel 句柄,当对象被销毁时,将会调用这个 Cancel 句柄,从而实现取消的功能
    // 在 Unity 2022.2之后,您可以在 MonoBehaviour 中使用`destroyCancellationToken`
    var asset2 = await Resources.LoadAsync<TextAsset>("bar").WithCancellation(this.GetCancellationTokenOnDestroy());

    // .ToUniTask 可接收一个 progress 回调以及一些配置参数,Progress.Create 是 IProgress<T> 的轻量级替代方案
    var asset3 = await Resources.LoadAsync<TextAsset>("baz").ToUniTask(Progress.Create<float>(x => Debug.Log(x)));

    // 等待一个基于帧的延时操作(就像一个协程一样)
    await UniTask.DelayFrame(100); 

    // yield return new WaitForSeconds/WaitForSecondsRealtime 的替代方案
    await UniTask.Delay(TimeSpan.FromSeconds(10), ignoreTimeScale: false);
    
    // 可以等待任何 playerloop 的生命周期(PreUpdate,Update,LateUpdate等)
    await UniTask.Yield(PlayerLoopTiming.PreLateUpdate);

    // yield return null 的替代方案
    await UniTask.Yield();
    await UniTask.NextFrame();

    // WaitForEndOfFrame 的替代方案
#if UNITY_2023_1_OR_NEWER
    await UniTask.WaitForEndOfFrame();
#else
    // 需要 MonoBehaviour(CoroutineRunner)
    await UniTask.WaitForEndOfFrame(this); // this是一个 MonoBehaviour
#endif
    
    // yield return new WaitForFixedUpdate 的替代方案,(等同于 UniTask.Yield(PlayerLoopTiming.FixedUpdate))
    await UniTask.WaitForFixedUpdate();
    
    // yield return WaitUntil 的替代方案
    await UniTask.WaitUntil(() => isActive == false);

    // WaitUntil 扩展,指定某个值改变时触发
    await UniTask.WaitUntilValueChanged(this, x => x.isActive);

    // 您可以直接 await 一个 IEnumerator 协程
    await FooCoroutineEnumerator();

    // 您可以直接 await 一个原生 task
    await Task.Run(() => 100);

    // 多线程示例,在此行代码后的内容都运行在一个线程池上
    await UniTask.SwitchToThreadPool();

    /* 工作在线程池上的代码 */

    // 转回主线程(等同于 UniRx 的`ObserveOnMainThread`)
    await UniTask.SwitchToMainThread();

    // 获取异步的 webrequest
    async UniTask<string> GetTextAsync(UnityWebRequest req)
    {
        var op = await req.SendWebRequest();
        return op.downloadHandler.text;
    }

    var task1 = GetTextAsync(UnityWebRequest.Get("http://google.com"));
    var task2 = GetTextAsync(UnityWebRequest.Get("http://bing.com"));
    var task3 = GetTextAsync(UnityWebRequest.Get("http://yahoo.com"));

    // 构造一个 async-wait,并通过元组语义轻松获取所有结果
    var (google, bing, yahoo) = await UniTask.WhenAll(task1, task2, task3);

    // WhenAll 的简写形式,元组可以直接 await
    var (google2, bing2, yahoo2) = await (task1, task2, task3);

    // 返回一个异步值,或者您也可以使用`UniTask`(无结果),`UniTaskVoid`(不可等待)
    return (asset as TextAsset)?.text ?? throw new InvalidOperationException("Asset not found");
}
```

UniTask 和 AsyncOperation 的基础知识
---
UniTask 功能依赖于 C# 7.0([task-like custom async method builder feature](https://github.com/dotnet/roslyn/blob/master/docs/features/task-types.md)),所以需要`Unity 2018.3`之后的版本,官方支持的最低版本是`Unity 2018.4.13f1`。

为什么需要 UniTask(自定义task对象)?因为原生 Task 太重,与 Unity 线程(单线程)相性不好。因为 Unity 的异步对象由 Unity 的引擎层自动调度,所以 UniTask 不使用线程和 SynchronizationContext/ExecutionContext。它实现了更快和更低的分配,并且与Unity完全兼容。

您可以在使用`using Cysharp.Threading.Tasks;`时对`AsyncOperation`,`ResourceRequest`,`AssetBundleRequest`,`AssetBundleCreateRequest`,`UnityWebRequestAsyncOperation`,`AsyncGPUReadbackRequest`,`IEnumerator`以及其他的异步操作进行 await

UniTask 提供了三种模式的扩展方法。

```csharp
await asyncOperation;
.WithCancellation(CancellationToken);
.ToUniTask(IProgress, PlayerLoopTiming, CancellationToken);
```

`WithCancellation`是`ToUniTask`的简化版本,两者都返回`UniTask`。有关 cancellation 的详细信息,请参阅:[取消和异常处理](https://github.com/Cysharp/UniTask#cancellation-and-exception-handling)部分。

> 注意:await 会在 PlayerLoop 执行await对象的相应native生命周期方法时返回(如果条件满足的话),而 WithCancellation 和 ToUniTask 是从指定的 PlayerLoop 生命周期执行时返回。有关 PlayLoop生命周期 的详细信息,请参阅:[PlayerLoop](https://github.com/Cysharp/UniTask#playerloop)部分。

> 注意: AssetBundleRequest 有`asset`和`allAssets`,默认 await 返回`asset`。如果您想得到`allAssets`,您可以使用`AwaitForAllAssets()`方法。

`UniTask`可以使用`UniTask.WhenAll`,`UniTask.WhenAny`,`UniTask.WhenEach`等实用函数。它们就像`Task.WhenAll`和`Task.WhenAny`,但它们返回的数据类型更好用。它们会返回值元组,因此您可以传递多种类型并解构每个结果。

```csharp
public async UniTaskVoid LoadManyAsync()
{
    // 并行加载.
    var (a, b, c) = await UniTask.WhenAll(
        LoadAsSprite("foo"),
        LoadAsSprite("bar"),
        LoadAsSprite("baz"));
}

async UniTask<Sprite> LoadAsSprite(string path)
{
    var resource = await Resources.LoadAsync<Sprite>(path);
    return (resource as Sprite);
}
```

如果您想要将一个回调转换为 UniTask,您可以使用`UniTaskCompletionSource<T>`,它是`TaskCompletionSource<T>`的轻量级版本。

```csharp
public UniTask<int> WrapByUniTaskCompletionSource()
{
    var utcs = new UniTaskCompletionSource<int>();

    // 当操作完成时,调用 utcs.TrySetResult();
    // 当操作失败时,调用 utcs.TrySetException();
    // 当操作取消时,调用 utcs.TrySetCanceled();

    return utcs.Task; //本质上就是返回了一个 UniTask<int>
}
```

您可以进行如下转换:<br>-`Task` -> `UniTask `:使用`AsUniTask`<br>-`UniTask` -> `UniTask<AsyncUnit>`:使用 `AsAsyncUnitUniTask`<br>-`UniTask<T>` -> `UniTask`:使用 `AsUniTask`。`UniTask<T>` -> `UniTask`的转换是无消耗的。

如果您想将异步转换为协程,您可以使用`.ToCoroutine()`,这对于您想只允许使用协程系统大有帮助。

UniTask 不能 await 两次。这是与.NET Standard 2.1 中引入的[ValueTask/IValueTaskSource](https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.valuetask-1?view=netcore-3.1)具有相同的约束。

> 千万不要对 `ValueTask<TResult>` 实例执行以下操作:
>
> - 多次await实例。
> - 多次调用 AsTask。
> - 在操作尚未完成时调用 .Result 或 .GetAwaiter().GetResult(),或对它们进行多次调用。
> - 对实例进行上述多种操作。
>
> 如果您执行了上述任何操作,则结果是未定义的。

```csharp
var task = UniTask.DelayFrame(10);
await task;
await task; // 错误,抛出异常
```

如果实在需要多次 await 一个异步操作,可以使用支持多次调用的`UniTask.Lazy`。`.Preserve()`同样允许多次调用(由 UniTask 内部缓存结果)。这种方法在函数范围内有多次调用时很有用。

同样的,`UniTaskCompletionSource`可以在同一个地方被 await 多次,或者在很多不同的地方被 await。

取消和异常处理
---
一些 UniTask 工厂方法中有一个`CancellationToken cancellationToken = default`参数。Unity 的一些异步操作也有`WithCancellation(CancellationToken)`和`ToUniTask(..., CancellationToken cancellation = default)`扩展方法。

可以通过原生的[`CancellationTokenSource`](https://docs.microsoft.com/en-us/dotnet/api/system.threading.cancellationtokensource)将 CancellationToken 传递给参数

```csharp
var cts = new CancellationTokenSource();

cancelButton.onClick.AddListener(() =>
{
    cts.Cancel();
});

await UnityWebRequest.Get("http://google.co.jp").SendWebRequest().WithCancellation(cts.Token);

await UniTask.DelayFrame(1000, cancellationToken: cts.Token);
```

CancellationToken 可通过`CancellationTokenSource`或 MonoBehaviour 的扩展方法`GetCancellationTokenOnDestroy`来创建。

```csharp
// 这个 CancellationToken 的生命周期与 GameObject 的相同
await UniTask.DelayFrame(1000, cancellationToken: this.GetCancellationTokenOnDestroy());
```

对于链式取消,建议所有异步方法的最后一个参数都接受`CancellationToken cancellationToken`,并将`CancellationToken`从头传递到尾。

```csharp
await FooAsync(this.GetCancellationTokenOnDestroy());

// ---

async UniTask FooAsync(CancellationToken cancellationToken)
{
    await BarAsync(cancellationToken);
}

async UniTask BarAsync(CancellationToken cancellationToken)
{
    await UniTask.Delay(TimeSpan.FromSeconds(3), cancellationToken);
}
```

`CancellationToken`代表了异步操作的生命周期。您可以不使用默认的 CancellationTokenOnDestroy ,通过自定义的`CancellationToken`自行管理生命周期。

```csharp
public class MyBehaviour : MonoBehaviour
{
    CancellationTokenSource disableCancellation = new CancellationTokenSource();
    CancellationTokenSource destroyCancellation = new CancellationTokenSource();

    private void OnEnable()
    {
        if (disableCancellation != null)
        {
            disableCancellation.Dispose();
        }
        disableCancellation = new CancellationTokenSource();
    }

    private void OnDisable()
    {
        disableCancellation.Cancel();
    }

    private void OnDestroy()
    {
        destroyCancellation.Cancel();
        destroyCancellation.Dispose();
    }
}
```

在Unity 2022.2之后,Unity在[MonoBehaviour.destroyCancellationToken](https://docs.unity3d.com/ScriptReference/MonoBehaviour-destroyCancellationToken.html)和[Application.exitCancellationToken](https://docs.unity3d.com/ScriptReference/Application-exitCancellationToken.html)中添加了 CancellationToken。

当检测到取消时,所有方法都会向上游抛出并传播`OperationCanceledException`。当异常(不限于`OperationCanceledException`)没有在异步方法中处理时,它将被传播到`UniTaskScheduler.UnobservedTaskException`。默认情况下,将接收到的未处理异常作为一般异常写入日志。可以使用`UniTaskScheduler.UnobservedExceptionWriteLogType`更改日志级别。若想对接收到未处理异常时的处理进行自定义,请为`UniTaskScheduler.UnobservedTaskException`设置一个委托

而`OperationCanceledException`是一种特殊的异常,会被`UnobservedTaskException`无视

如果要取消异步 UniTask 方法中的行为,请手动抛出`OperationCanceledException`。

```csharp
public async UniTask<int> FooAsync()
{
    await UniTask.Yield();
    throw new OperationCanceledException();
}
```

如果您只想处理异常,忽略取消操作(让其传播到全局处理 cancellation 的地方),请使用异常过滤器。

```csharp
public async UniTask<int> BarAsync()
{
    try
    {
        var x = await FooAsync();
        return x * 2;
    }
    catch (Exception ex) when (!(ex is OperationCanceledException)) // 在 C# 9.0 下改成 when (ex is not OperationCanceledException) 
    {
        return -1;
    }
}
```

抛出和捕获`OperationCanceledException`有点重度,如果比较在意性能开销,请使用`UniTask.SuppressCancellationThrow`以避免抛出 OperationCanceledException 。它将返回`(bool IsCanceled, T Result)`而不是抛出异常。

```csharp
var (isCanceled, _) = await UniTask.DelayFrame(10, cancellationToken: cts.Token).SuppressCancellationThrow();
if (isCanceled)
{
    // ...
}
```

注意:仅当您在源头处直接调用`UniTask.SuppressCancellationThrow`时才会抑制异常抛出。否则,返回值将被转换,且整个管道不会抑制异常抛出。

`UniTask.Yield`和`UniTask.Delay`等功能依赖于 Unity 的 PlayerLoop,它们在 PlayerLoop 中确定`CancellationToken`状态。
这意味着当`CancellationToken`被触发时,它们并不会立即取消。

如果要更改此行为,实现立即取消,可将`cancelImmediately`标志设置为 true。

```csharp
await UniTask.Yield(cancellationToken, cancelImmediately: true);
```

注意:比起默认行为,设置 `cancelImmediately` 为 true 并检测立即取消会有更多的性能开销。
这是因为它使用了`CancellationToken.Register`;这比在 PlayerLoop 中检查 CancellationToken 更重度。

超时处理
---
超时是取消的一种变体。您可以通过`CancellationTokenSouce.CancelAfterSlim(TimeSpan)`设置超时并将 CancellationToken 传递给异步方法。

```csharp
var cts = new CancellationTokenSource();
cts.CancelAfterSlim(TimeSpan.FromSeconds(5)); // 设置5s超时。

try
{
    await UnityWebRequest.Get("http://foo").SendWebRequest().WithCancellation(cts.Token);
}
catch (OperationCanceledException ex)
{
    if (ex.CancellationToken == cts.Token)
    {
        UnityEngine.Debug.Log("Timeout");
    }
}
```

> `CancellationTokenSouce.CancelAfter`是一个原生的 api。但是在 Unity 中您不应该使用它,因为它依赖于线程计时器。`CancelAfterSlim`是 UniTask 的扩展方法,它使用 PlayerLoop 代替了线程计时器。

如果您想将超时与其他 cancellation 一起使用,请使用`CancellationTokenSource.CreateLinkedTokenSource`。

```csharp
var cancelToken = new CancellationTokenSource();
cancelButton.onClick.AddListener(()=>
{
    cancelToken.Cancel(); // 点击按钮后取消。
});

var timeoutToken = new CancellationTokenSource();
timeoutToken.CancelAfterSlim(TimeSpan.FromSeconds(5)); // 设置5s超时。

try
{
    // 链接 token
    var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancelToken.Token, timeoutToken.Token);

    await UnityWebRequest.Get("http://foo").SendWebRequest().WithCancellation(linkedTokenSource.Token);
}
catch (OperationCanceledException ex)
{
    if (timeoutToken.IsCancellationRequested)
    {
        UnityEngine.Debug.Log("Timeout.");
    }
    else if (cancelToken.IsCancellationRequested)
    {
        UnityEngine.Debug.Log("Cancel clicked.");
    }
}
```

为减少每次调用异步方法时用于超时的 CancellationTokenSource 的堆内存分配,您可以使用 UniTask 的`TimeoutController`进行优化。

```csharp
TimeoutController timeoutController = new TimeoutController(); // 提前创建好,以便复用。

async UniTask FooAsync()
{
    try
    {
        // 您可以通过 timeoutController.Timeout(TimeSpan) 把超时设置传递到 cancellationToken。
        await UnityWebRequest.Get("http://foo").SendWebRequest()
            .WithCancellation(timeoutController.Timeout(TimeSpan.FromSeconds(5)));
        timeoutController.Reset(); // 当 await 完成后调用 Reset(停止超时计时器,并准备下一次复用)。
    }
    catch (OperationCanceledException ex)
    {
        if (timeoutController.IsTimeout())
        {
            UnityEngine.Debug.Log("timeout");
        }
    }
}
```

如果您想将超时结合其他取消源一起使用,请使用`new TimeoutController(CancellationToken)`.

```csharp
TimeoutController timeoutController;
CancellationTokenSource clickCancelSource;

void Start()
{
    this.clickCancelSource = new CancellationTokenSource();
    this.timeoutController = new TimeoutController(clickCancelSource);
}
```

注意:UniTask 有`.Timeout`,`.TimeoutWithoutException`方法,但如果可以的话,尽量不要使用这些方法,请传递`CancellationToken`。因为`.Timeout`是在任务外部执行,所以无法停止超时任务。`.Timeout`意味着超时后忽略结果。如果您将一个`CancellationToken`传递给该方法,它将从任务内部执行,因此可以停止正在运行的任务。

进度
---
一些 Unity 的异步操作具有`ToUniTask(IProgress<float> progress = null, ...)`的扩展方法。

```csharp
var progress = Progress.Create<float>(x => Debug.Log(x));

var request = await UnityWebRequest.Get("http://google.co.jp")
    .SendWebRequest()
    .ToUniTask(progress: progress);
```

您不应该使用原生的`new System.Progress<T>`,因为每次调用它都会产生堆内存分配。请改用`Cysharp.Threading.Tasks.Progress`。这个 progress 工厂类有两个方法,`Create`和`CreateOnlyValueChanged`。`CreateOnlyValueChanged`仅在进度值更新时调用。

为调用者实现 IProgress 接口会更好,这样不会因使用 lambda 而产生堆内存分配。

```csharp
public class Foo : MonoBehaviour, IProgress<float>
{
    public void Report(float value)
    {
        UnityEngine.Debug.Log(value);
    }

    public async UniTaskVoid WebRequest()
    {
        var request = await UnityWebRequest.Get("http://google.co.jp")
            .SendWebRequest()
            .ToUniTask(progress: this);
    }
}
```

PlayerLoop
---
UniTask 运行在自定义的[PlayerLoop](https://docs.unity3d.com/ScriptReference/LowLevel.PlayerLoop.html)中。UniTask 中基于 PlayerLoop 的方法(如`Delay`、`DelayFrame`、`asyncOperation.ToUniTask`等)接受这个`PlayerLoopTiming`。

```csharp
public enum PlayerLoopTiming
{
    Initialization = 0,
    LastInitialization = 1,

    EarlyUpdate = 2,
    LastEarlyUpdate = 3,

    FixedUpdate = 4,
    LastFixedUpdate = 5,

    PreUpdate = 6,
    LastPreUpdate = 7,

    Update = 8,
    LastUpdate = 9,

    PreLateUpdate = 10,
    LastPreLateUpdate = 11,

    PostLateUpdate = 12,
    LastPostLateUpdate = 13
    
#if UNITY_2020_2_OR_NEWER
    TimeUpdate = 14,
    LastTimeUpdate = 15,
#endif
}
```

它表明了异步任务会在哪个时机运行,您可以查阅[PlayerLoopList.md](https://gist.github.com/neuecc/bc3a1cfd4d74501ad057e49efcd7bdae)以了解 Unity 的默认 PlayerLoop 以及注入的 UniTask 的自定义循环。

`PlayerLoopTiming.Update`与协程中的`yield return null`类似,但它会在`ScriptRunBehaviourUpdate`时,Update(Update 和 uGUI 事件(button.onClick等)之前被调用,而 yield return null 是在`ScriptRunDelayedDynamicFrameRate`时被调用。`PlayerLoopTiming.FixedUpdate`类似于`WaitForFixedUpdate`。

> `PlayerLoopTiming.LastPostLateUpdate`不等同于协程的`yield return new WaitForEndOfFrame()`。协程的 WaitForEndOfFrame 似乎在 PlayerLoop 完成后运行。一些需要协程结束帧的方法(`Texture2D.ReadPixels`,`ScreenCapture.CaptureScreenshotAsTexture`,`CommandBuffer`等)在 async/await 时无法正常工作。在这些情况下,请将 MonoBehaviour(用于运行协程)传递给`UniTask.WaitForEndOfFrame`。例如,`await UniTask.WaitForEndOfFrame(this);`是`yield return new WaitForEndOfFrame()`轻量级无堆内存分配的替代方案。

> 注意:在 Unity 2023.1或更高的版本中,`await UniTask.WaitForEndOfFrame();`不再需要 MonoBehaviour。因为它使用了`UnityEngine.Awaitable.EndOfFrameAsync`。

`yield return null`和`UniTask.Yield`相似但不同。`yield return null`总是返回下一帧但`UniTask.Yield`返回下一次调用。也就是说,`UniTask.Yield(PlayerLoopTiming.Update)`在 `PreUpdate`上调用,它返回同一帧。`UniTask.NextFrame()`保证返回下一帧,您可以认为它的行为与`yield return null`一致。

> UniTask.Yield(不带 CancellationToken)是一种特殊类型,返回`YieldAwaitable`并在 YieldRunner 上运行。它是最轻量和最快的。

`AsyncOperation`在原生生命周期返回。例如,await `SceneManager.LoadSceneAsync`在`EarlyUpdate.UpdatePreloading`时返回,在此之后,在`EarlyUpdate.ScriptRunDelayedStartupFrame`时调用已加载场景的`Start`方法。同样的,`await UnityWebRequest`在`EarlyUpdate.ExecuteMainThreadJobs`时返回。

在 UniTask 中,直接 await 使用的是原生生命周期,而`WithCancellation`和`ToUniTask`使用的特定的生命周期。这通常不会有问题,但对于`LoadSceneAsync`,它会导致`Start`方法与 await 之后的逻辑的执行顺序错乱。所以建议不要使用`LoadSceneAsync.ToUniTask`。

> 注意:在 Unity 2023.1或更高的版本中,当您使用新的`UnityEngine.Awaitable`方法(如`SceneManager.LoadSceneAsync`)时,请确保您的文件的 using 指令区域中包含`using UnityEngine;`。
> 这可以通过避免使用`UnityEngine.AsyncOperation`版本来防止编译错误。

在堆栈跟踪中,您可以检查它在 PlayerLoop 中的运行位置。

![image](https://user-images.githubusercontent.com/46207/83735571-83caea80-a68b-11ea-8d22-5e22864f0d24.png)

默认情况下,UniTask 的 PlayerLoop 在`[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]`初始化。

在 BeforeSceneLoad 中调用的方法,它们的执行顺序是不确定的,所以如果您想在其他 BeforeSceneLoad 方法中使用 UniTask,您应该尝试在此之前初始化好 PlayerLoop。

```csharp
// AfterAssembliesLoaded 表示将会在 BeforeSceneLoad 之前调用
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)]
public static void InitUniTaskLoop()
{
    var loop = PlayerLoop.GetCurrentPlayerLoop();
    Cysharp.Threading.Tasks.PlayerLoopHelper.Initialize(ref loop);
}
```

如果您导入了 Unity 的`Entities`包,则会在`BeforeSceneLoad`将自定义 PlayerLoop 重置为默认值,并注入 ECS 的循环。当 Unity 在 UniTask 的初始化方法执行之后调用了 ECS 的注入方法,UniTask 将不再起作用。

为了解决这个问题,您可以在 ECS 初始化后重新初始化 UniTask PlayerLoop。

```csharp
// 获取 ECS Loop。
var playerLoop = ScriptBehaviourUpdateOrder.CurrentPlayerLoop;

// 设置 UniTask PlayerLoop。
PlayerLoopHelper.Initialize(ref playerLoop);
```

您可以通过调用`PlayerLoopHelper.IsInjectedUniTaskPlayerLoop()`来诊断 UniTask 的 PlayerLoop 是否准备就绪。并且`PlayerLoopHelper.DumpCurrentPlayerLoop`还会将所有当前 PlayerLoop 记录到控制台。

```csharp
void Start()
{
    UnityEngine.Debug.Log("UniTaskPlayerLoop ready? " + PlayerLoopHelper.IsInjectedUniTaskPlayerLoop());
    PlayerLoopHelper.DumpCurrentPlayerLoop();
}
```

您可以通过移除未使用的 PlayerLoopTiming 注入来稍微优化循环成本。您可以在初始化时调用`PlayerLoopHelper.Initialize(InjectPlayerLoopTimings)`。

```csharp
var loop = PlayerLoop.GetCurrentPlayerLoop();
PlayerLoopHelper.Initialize(ref loop, InjectPlayerLoopTimings.Minimum); // Minimum 就是 Update | FixedUpdate | LastPostLateUpdate
```

`InjectPlayerLoopTimings`有三个预设,`All`,`Standard`(All 除 LastPostLateUpdate 外),`Minimum`(`Update | FixedUpdate | LastPostLateUpdate`)。默认为 All,您可以通过组合来自定义要注入的时机,例如`InjectPlayerLoopTimings.Update | InjectPlayerLoopTimings.FixedUpdate | InjectPlayerLoopTimings.PreLateUpdate`。

使用未注入`PlayerLoopTiming`的[Microsoft.CodeAnalysis.BannedApiAnalyzers](https://github.com/dotnet/roslyn-analyzers/blob/master/src/Microsoft.CodeAnalysis.BannedApiAnalyzers/BannedApiAnalyzers.Help.md)可能会出错。例如,您可以像下列方式那样,为`InjectPlayerLoopTimings.Minimum`设置`BannedSymbols.txt`

```txt
F:Cysharp.Threading.Tasks.PlayerLoopTiming.Initialization; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.LastInitialization; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.EarlyUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.LastEarlyUpdate; Isn't injected this PlayerLoop in this project.d
F:Cysharp.Threading.Tasks.PlayerLoopTiming.LastFixedUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.PreUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.LastPreUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.LastUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.PreLateUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.LastPreLateUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.PostLateUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.TimeUpdate; Isn't injected this PlayerLoop in this project.
F:Cysharp.Threading.Tasks.PlayerLoopTiming.LastTimeUpdate; Isn't injected this PlayerLoop in this project.
```

您可以将`RS0030`的严重性配置为错误。

![image](https://user-images.githubusercontent.com/46207/109150837-bb933880-77ac-11eb-85ba-4fd15819dbd0.png)

async void 与 async UniTaskVoid 对比
---
`async void`是一个原生的 C# 任务系统,因此它不在 UniTask 系统上运行。也最好不要使用它。`async UniTaskVoid`是`async UniTask`的轻量级版本,因为它没有等待完成并立即向`UniTaskScheduler.UnobservedTaskException`报告错误。如果您不需要等待(即发即弃),那么使用`UniTaskVoid`会更好。不幸的是,要解除警告,您需要在尾部添加`Forget()`。

```csharp
public async UniTaskVoid FireAndForgetMethod()
{
    // do anything...
    await UniTask.Yield();
}

public void Caller()
{
    FireAndForgetMethod().Forget();
}
```

UniTask 也有`Forget`方法,与`UniTaskVoid`类似且效果相同。如果您完全不需要使用`await`,那么使用`UniTaskVoid`会更高效。

```csharp
public async UniTask DoAsync()
{
    // do anything...
    await UniTask.Yield();
}

public void Caller()
{
    DoAsync().Forget();
}
```

要使用注册到事件的异步 lambda,请不要使用`async void`。您可以使用`UniTask.Action` 或 `UniTask.UnityAction`来代替,这两者都通过`async UniTaskVoid` lambda 来创建委托。

```csharp
Action actEvent;
UnityAction unityEvent; // UGUI 特供

// 这样是不好的: async void
actEvent += async () => { };
unityEvent += async () => { };

// 这样是可以的: 通过 lamada 创建 Action
actEvent += UniTask.Action(async () => { await UniTask.Yield(); });
unityEvent += UniTask.UnityAction(async () => { await UniTask.Yield(); });
```

`UniTaskVoid`也可以用在 MonoBehaviour 的`Start`方法中。

```csharp
class Sample : MonoBehaviour
{
    async UniTaskVoid Start()
    {
        // 异步初始化代码。
    }
}
```

UniTaskTracker
---
对于检查(泄露的)UniTasks 很有用。您可以在`Window -> UniTask Tracker`中打开跟踪器窗口。

![image](https://user-images.githubusercontent.com/46207/83527073-4434bf00-a522-11ea-86e9-3b3975b26266.png)

- Enable AutoReload(Toggle) - 自动重新加载。
- Reload - 重新加载视图(重新扫描内存中UniTask实例,并刷新界面)。
- GC.Collect - 调用 GC.Collect。
- Enable Tracking(Toggle) - 开始跟踪异步/等待 UniTask。性能影响:低。
- Enable StackTrace(Toggle) - 在任务启动时捕获 StackTrace。性能影响:高。

UniTaskTracker 仅用于调试用途,因为启用跟踪和捕获堆栈跟踪很有用,但会对性能产生重大影响。推荐的用法是只在查找任务泄漏时启用跟踪和堆栈跟踪,并在使用完毕后禁用它们。

外部拓展
---
默认情况下,UniTask 支持 TextMeshPro(`BindTo(TMP_Text)`和像原生 uGUI `InputField` 那样的事件扩展,如`TMP_InputField`)、DOTween(`Tween`作为可等待的)和 Addressables(`AsyncOperationHandle`和`AsyncOperationHandle<T>`作为可等待的)。

它们被定义在了如`UniTask.TextMeshPro`,`UniTask.DOTween`,`UniTask.Addressables`等单独的 asmdef文件中。

从包管理器中导入软件包时,会自动启用对 TextMeshPro 和 Addressables 的支持。
但对于 DOTween 的支持,则需要从[DOTWeen assets](https://assetstore.unity.com/packages/tools/animation/dotween-hotween-v2-27676r)中导入并定义脚本定义符号`UNITASK_DOTWEEN_SUPPORT`后才能启用。

```csharp
// 动画序列
await transform.DOMoveX(2, 10);
await transform.DOMoveZ(5, 20);

// 并行,并传递 cancellation 用于取消
var ct = this.GetCancellationTokenOnDestroy();

await UniTask.WhenAll(
    transform.DOMoveX(10, 3).WithCancellation(ct),
    transform.DOScale(10, 3).WithCancellation(ct));
```

DOTween 支持的默认行为(`await`,`WithCancellation`,`ToUniTask`) 会等待到 tween 被终止。它适用于 Complete(true/false) 和 Kill(true/false)。但是如果您想复用 tweens(`SetAutoKill(false)`),它就不能按预期工作。如果您想等待另一个时间点,Tween 中存在以下扩展方法,`AwaitForComplete`,`AwaitForPause`,`AwaitForPlay`,`AwaitForRewind`,`AwaitForStepComplete`。

AsyncEnumerable 和 Async LINQ
---
Unity 2020.2 支持 C# 8.0,因此您可以使用`await foreach`。这是异步时代的新更新符号。

```csharp
// Unity 2020.2,C# 8.0
await foreach (var _ in UniTaskAsyncEnumerable.EveryUpdate().WithCancellation(token))
{
    Debug.Log("Update() " + Time.frameCount);
}
```

在 C# 7.3 环境中,您可以使用`ForEachAsync`方法以几乎相同的方式工作。

```csharp
// C# 7.3(Unity 2018.3~)
await UniTaskAsyncEnumerable.EveryUpdate().ForEachAsync(_ =>
{
    Debug.Log("Update() " + Time.frameCount);
}, token);
```

`UniTask.WhenEach`类似于 .NET 9 的`Task.WhenEach`,它可以使用新的方式来等待多个任务。

```csharp
await foreach (var result in UniTask.WhenEach(task1, task2, task3))
{
    // 结果的类型为 WhenEachResult<T>。
    // 它包含 `T Result` or `Exception Exception`。
    // 您可以检查 `IsCompletedSuccessfully` 或 `IsFaulted` 以确定是访 `.Result` 还是 `.Exception`。
    // 如果希望在 `IsFaulted` 时抛出异常并在成功时获取结果,可以使用 `GetResult()`。
    Debug.Log(result.GetResult());
}
```

UniTaskAsyncEnumerable 实现了异步 LINQ,类似于 LINQ 的`IEnumerable<T>`或 Rx 的 `IObservable<T>`。所有标准 LINQ 查询运算符都可以应用于异步流。例如,以下代码展示了如何将 Where 过滤器应用于每两次单击运行一次的按钮点击异步流。

```csharp
await okButton.OnClickAsAsyncEnumerable().Where((x, i) => i % 2 == 0).ForEachAsync(_ =>
{
});
```

即发即弃(Fire and Forget)风格(例如,事件处理),您也可以使用`Subscribe`。

```csharp
okButton.OnClickAsAsyncEnumerable().Where((x, i) => i % 2 == 0).Subscribe(_ =>
{
});
```

在引入`using Cysharp.Threading.Tasks.Linq;`后,异步 LINQ 将被启用,并且`UniTaskAsyncEnumerable`在 asmdef 文件`UniTask.Linq`中定义。

它更接近 UniRx(Reactive Extensions),但 UniTaskAsyncEnumerable 是基于 pull 的异步流,而 Rx 是基于 push 的异步流。请注意,尽管它们相似,但特性不同,细节也有所不同。

`UniTaskAsyncEnumerable`是类似`Enumerable`的入口点。除了标准查询操作符之外,还为 Unity 提供了其他生成器,例如`EveryUpdate`、`Timer`、`TimerFrame`、`Interval`、`IntervalFrame`和`EveryValueChanged`。此外,还添加了 UniTask 原生的查询操作符,如`Append`,`Prepend`,`DistinctUntilChanged`,`ToHashSet`,`Buffer`,`CombineLatest`,`Do`,`Never`,`ForEachAsync`,`Pairwise`,`Publish`,`Queue`,`Return`,`SkipUntil`,`TakeUntil`,`SkipUntilCanceled`,`TakeUntilCanceled`,`TakeLast`,`Subscribe`。

以 Func 作为参数的方法具有三个额外的重载,另外两个是`***Await`和`***AwaitWithCancellation`。

```csharp
Select(Func<T, TR> selector)
SelectAwait(Func<T, UniTask<TR>> selector)
SelectAwaitWithCancellation(Func<T, CancellationToken, UniTask<TR>> selector)
```

如果在 func 内部使用`async`方法,请使用`***Await`或`***AwaitWithCancellation`。

如何创建异步迭代器:C# 8.0 支持异步迭代器(`async yield return`),但它只允许`IAsyncEnumerable<T>`,当然也需要 C# 8.0。UniTask 支持使用`UniTaskAsyncEnumerable.Create`方法来创建自定义异步迭代器。

```csharp
// IAsyncEnumerable,C# 8.0 异步迭代器。(请不要这样使用,因为 IAsyncEnumerable 不被 UniTask 所控制)。
public async IAsyncEnumerable<int> MyEveryUpdate([EnumeratorCancellation]CancellationToken cancelationToken = default)
{
    var frameCount = 0;
    await UniTask.Yield();
    while (!token.IsCancellationRequested)
    {
        yield return frameCount++;
        await UniTask.Yield();
    }
}

// UniTaskAsyncEnumerable.Create 并用 `await writer.YieldAsync` 代替 `yield return`.
public IUniTaskAsyncEnumerable<int> MyEveryUpdate()
{
    // writer(IAsyncWriter<T>) 有 `YieldAsync(value)` 方法。
    return UniTaskAsyncEnumerable.Create<int>(async (writer, token) =>
    {
        var frameCount = 0;
        await UniTask.Yield();
        while (!token.IsCancellationRequested)
        {
            await writer.YieldAsync(frameCount++); // 代替 `yield return`
            await UniTask.Yield();
        }
    });
}
```

可等待事件
---
所有 uGUI 组件都实现了`***AsAsyncEnumerable`,以实现对事件的异步流的转换。

```csharp
async UniTask TripleClick()
{
    // 默认情况下,使用了button.GetCancellationTokenOnDestroy 来管理异步生命周期
    await button.OnClickAsync();
    await button.OnClickAsync();
    await button.OnClickAsync();
    Debug.Log("Three times clicked");
}

// 更高效的方法
async UniTask TripleClick()
{
    using (var handler = button.GetAsyncClickEventHandler())
    {
        await handler.OnClickAsync();
        await handler.OnClickAsync();
        await handler.OnClickAsync();
        Debug.Log("Three times clicked");
    }
}

// 使用异步 LINQ
async UniTask TripleClick(CancellationToken token)
{
    await button.OnClickAsAsyncEnumerable().Take(3).Last();
    Debug.Log("Three times clicked");
}

// 使用异步 LINQ
async UniTask TripleClick(CancellationToken token)
{
    await button.OnClickAsAsyncEnumerable().Take(3).ForEachAsync(_ =>
    {
        Debug.Log("Every clicked");
    });
    Debug.Log("Three times clicked, complete.");
}
```

所有 MonoBehaviour 消息事件均可通过`AsyncTriggers`转换成异步流,`AsyncTriggers`可通过引入`using Cysharp.Threading.Tasks.Triggers;`来启用。`AsyncTriggers`可以使用`GetAsync***Trigger`来创建,并将它作为 UniTaskAsyncEnumerable 来触发。

```csharp
var trigger = this.GetOnCollisionEnterAsyncHandler();
await trigger.OnCollisionEnterAsync();
await trigger.OnCollisionEnterAsync();
await trigger.OnCollisionEnterAsync();

// 每次移动触发。
await this.GetAsyncMoveTrigger().ForEachAsync(axisEventData =>
{
});
```

`AsyncReactiveProperty`,`AsyncReadOnlyReactiveProperty`是 UniTask 的 ReactiveProperty 版本。`BindTo`的`IUniTaskAsyncEnumerable<T>`扩展方法,可以把异步流值绑定到 Unity 组件(Text/Selectable/TMP/Text)。

```csharp
var rp = new AsyncReactiveProperty<int>(99);

// AsyncReactiveProperty 本身是 IUniTaskAsyncEnumerable,可以通过 LINQ 进行查询
rp.ForEachAsync(x =>
{
    Debug.Log(x);
}, this.GetCancellationTokenOnDestroy()).Forget();

rp.Value = 10; // 推送10给所有订阅者
rp.Value = 11; // 推送11给所有订阅者

// WithoutCurrent 忽略初始值
// BindTo 绑定 stream value 到 unity 组件.
rp.WithoutCurrent().BindTo(this.textComponent);

await rp.WaitAsync(); // 一直等待,直到下一个值被设置

// 同样支持 ToReadOnlyAsyncReactiveProperty
var rp2 = new AsyncReactiveProperty<int>(99);
var rorp = rp.CombineLatest(rp2, (x, y) => (x, y)).ToReadOnlyAsyncReactiveProperty(CancellationToken.None);
```

在序列中的异步处理完成之前,pull-based异步流不会获取下一个值。这可能会从按钮等推送类型的事件中溢出数据。

```csharp
// 在3s延迟结束前,无法获取 event
await button.OnClickAsAsyncEnumerable().ForEachAwaitAsync(async x =>
{
    await UniTask.Delay(TimeSpan.FromSeconds(3));
});
```

它(在防止双击方面)是有用的,但有时也并非都有用。

使用`Queue()`方法在异步处理期间也会对事件进行排队。

```csharp
// 异步处理中对 message 进行排队
await button.OnClickAsAsyncEnumerable().Queue().ForEachAwaitAsync(async x =>
{
    await UniTask.Delay(TimeSpan.FromSeconds(3));
});
```

或使用即发即弃风格的`Subscribe`。

```csharp
button.OnClickAsAsyncEnumerable().Subscribe(async x =>
{
    await UniTask.Delay(TimeSpan.FromSeconds(3));
});
```

Channel
---
`Channel`与[System.Threading.Tasks.Channels](https://docs.microsoft.com/en-us/dotnet/api/system.threading.channels?view=netcore-3.1)相同,类似于 GoLang Channel。

目前只支持多生产者、单消费者无界 Channel。它可以通过`Channel.CreateSingleConsumerUnbounded<T>()`来创建。

对于生产者(`.Writer`),使用`TryWrite`来推送值,使用`TryComplete`来完成 Channel。对于消费者(`.Reader`),使用`TryRead`、`WaitToReadAsync`、`ReadAsync`和`Completion`,`ReadAllAsync`来读取队列的消息。

`ReadAllAsync`返回`IUniTaskAsyncEnumerable<T>` 因此可以使用 LINQ 操作符。Reader 只允许单消费者,但可以使用`.Publish()`查询操作符来启用多播消息。例如,可以制作发布/订阅工具。

```csharp
public class AsyncMessageBroker<T> : IDisposable
{
    Channel<T> channel;

    IConnectableUniTaskAsyncEnumerable<T> multicastSource;
    IDisposable connection;

    public AsyncMessageBroker()
    {
        channel = Channel.CreateSingleConsumerUnbounded<T>();
        multicastSource = channel.Reader.ReadAllAsync().Publish();
        connection = multicastSource.Connect(); // Publish returns IConnectableUniTaskAsyncEnumerable.
    }

    public void Publish(T value)
    {
        channel.Writer.TryWrite(value);
    }

    public IUniTaskAsyncEnumerable<T> Subscribe()
    {
        return multicastSource;
    }

    public void Dispose()
    {
        channel.Writer.TryComplete();
        connection.Dispose();
    }
}
```

与 Awaitable 对比
---
Unity 6 引入了可等待类型[Awaitable](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Awaitable.html)。简而言之,Awaitable 可以被认为是 UniTask 的一个子集,并且事实上,Awaitable的设计也受 UniTask 的影响。它应该能够处理基于 PlayerLoop 的 await,池化 Task,以及支持以类似的方式使用`CancellationToken`进行取消。随着它被包含在标准库中,您可能想知道是继续使用 UniTask 还是迁移到 Awaitable。以下是简要指南。

首先,Awaitable 提供的功能与协程提供的功能相同。使用 await 代替`yield return`;`await NextFrameAsync()`代替`yield return null`;`WaitForSeconds`和`EndOfFrame`等价。然而,这只是两者之间的差异。就功能而言,它是基于协程的,缺乏基于 Task 的特性。在使用 async/await 的实际应用程序开发中,像`WhenAll`这样的操作是必不可少的。此外,UniTask 支持许多基于帧的操作(如`DelayFrame`)和更灵活的 PlayerLoopTiming 控制,这些在 Awaitable 中是不可用的。当然,它也没有跟踪器窗口。

因此,我推荐在应用程序开发中使用 UniTask。UniTask 是 Awaitable 的超集,并包含了许多基本特性。对于库开发,如果您希望避免外部依赖,可以使用 Awaitable 作为方法的返回类型。因为 Awaitable 可以使用`AsUniTask`转换为 UniTask,所以支持在 UniTask 库中处理基于 Awaitable 的功能。即便是在库开发中,如果您不需要担心依赖关系,使用 UniTask 也会是您的最佳选择。

单元测试
---
Unity 的`[UnityTest]`属性可以测试协程(IEnumerator)但不能测试异步。`UniTask.ToCoroutine`将 async/await 桥接到协程,以便您可以测试异步方法。

```csharp
[UnityTest]
public IEnumerator DelayIgnore() => UniTask.ToCoroutine(async () =>
{
    var time = Time.realtimeSinceStartup;

    Time.timeScale = 0.5f;
    try
    {
        await UniTask.Delay(TimeSpan.FromSeconds(3), ignoreTimeScale: true);

        var elapsed = Time.realtimeSinceStartup - time;
        Assert.AreEqual(3, (int)Math.Round(TimeSpan.FromSeconds(elapsed).TotalSeconds, MidpointRounding.ToEven));
    }
    finally
    {
        Time.timeScale = 1.0f;
    }
});
```

UniTask 自身的单元测试是使用 Unity Test Runner 和[Cysharp/RuntimeUnitTestToolkit](https://github.com/Cysharp/RuntimeUnitTestToolkit)编写的,以集成到 CI 中并检查 IL2CPP 是否正常工作。

## 线程池的限制

大多数 UniTask 方法在单个线程 (PlayerLoop) 上运行,只有`UniTask.Run`(等同于`Task.Run`)和`UniTask.SwitchToThreadPool`在线程池上运行。如果您使用线程池,它将无法与 WebGL 等平台兼容。

`UniTask.Run`现在已弃用。您可以改用`UniTask.RunOnThreadPool`。并且还要考虑是否可以使用`UniTask.Create`或`UniTask.Void`。

## IEnumerator.ToUniTask 的限制

您可以将协程(IEnumerator)转换为 UniTask(或直接 await),但它有一些限制。

- 不支持`WaitForEndOfFrame`,`WaitForFixedUpdate`,`Coroutine`
- 生命周期与`StartCoroutine`不一样,它使用指定的`PlayerLoopTiming`,并且默认情况下,`PlayerLoopTiming.Update`在 MonoBehaviour 的`Update`和`StartCoroutine`的循环之前执行。

如果您想要实现从协程到异步的完全兼容转换,请使用`IEnumerator.ToUniTask(MonoBehaviour coroutineRunner)`重载。它会在传入的 MonoBehaviour 实例中执行 StartCoroutine 并在 UniTask 中等待它完成。

## 关于 UnityEditor

UniTask 可以像编辑器协程一样在 Unity 编辑器上运行。但它有一些限制。

- UniTask.Delay 的 DelayType.DeltaTime、UnscaledDeltaTime 无法正常工作,因为它们无法在编辑器中获取 deltaTime。因此在 EditMode 下运行时,会自动将 DelayType 更改为能等待正确的时间的`DelayType.Realtime`。
- 所有 PlayerLoopTiming 都在`EditorApplication.update`生命周期上运行。
- 带`-quit`的`-batchmode`不起作用,因为 Unity 不会执行 `EditorApplication.update` 并在一帧后退出。因此,不要使用`-quit`并使用`EditorApplication.Exit(0)`手动退出。

与原生 Task API 对比
---
UniTask 有许多原生的类Task API。此表展示了两者相对应的 API。

使用原生类型。

| .NET 类型                   | UniTask 类型 | 
|---------------------------| --- |
| `IProgress<T>`            | --- |
| `CancellationToken`       | --- | 
| `CancellationTokenSource` | --- |

使用 UniTask 类型。

| .NET 类型 | UniTask 类型 | 
| --- | --- |
| `Task`/`ValueTask` | `UniTask` |
| `Task<T>`/`ValueTask<T>` | `UniTask<T>` |
| `async void` | `async UniTaskVoid` | 
| `+= async () => { }` | `UniTask.Void`, `UniTask.Action`, `UniTask.UnityAction` |
| --- | `UniTaskCompletionSource` |
| `TaskCompletionSource<T>` | `UniTaskCompletionSource<T>`/`AutoResetUniTaskCompletionSource<T>` |
| `ManualResetValueTaskSourceCore<T>` | `UniTaskCompletionSourceCore<T>` |
| `IValueTaskSource` | `IUniTaskSource` |
| `IValueTaskSource<T>` | `IUniTaskSource<T>` |
| `ValueTask.IsCompleted` | `UniTask.Status.IsCompleted()` |
| `ValueTask<T>.IsCompleted` | `UniTask<T>.Status.IsCompleted()` |
| `new Progress<T>` | `Progress.Create<T>` |
| `CancellationToken.Register(UnsafeRegister)` | `CancellationToken.RegisterWithoutCaptureExecutionContext` |
| `CancellationTokenSource.CancelAfter` | `CancellationTokenSource.CancelAfterSlim` |
| `Channel.CreateUnbounded<T>(false){ SingleReader = true }` | `Channel.CreateSingleConsumerUnbounded<T>` |
| `IAsyncEnumerable<T>` | `IUniTaskAsyncEnumerable<T>` |
| `IAsyncEnumerator<T>` | `IUniTaskAsyncEnumerator<T>` |
| `IAsyncDisposable` | `IUniTaskAsyncDisposable` |
| `Task.Delay` | `UniTask.Delay` |
| `Task.Yield` | `UniTask.Yield` |
| `Task.Run` | `UniTask.RunOnThreadPool` |
| `Task.WhenAll` | `UniTask.WhenAll` |
| `Task.WhenAny` | `UniTask.WhenAny` |
| `Task.WhenEach` | `UniTask.WhenEach` |
| `Task.CompletedTask` | `UniTask.CompletedTask` |
| `Task.FromException` | `UniTask.FromException` |
| `Task.FromResult` | `UniTask.FromResult` |
| `Task.FromCanceled` | `UniTask.FromCanceled` |
| `Task.ContinueWith` | `UniTask.ContinueWith` |
| `TaskScheduler.UnobservedTaskException` | `UniTaskScheduler.UnobservedTaskException` |

池化配置
---
UniTask 通过积极缓存异步 promise 对象实现零堆内存分配(有关技术细节,请参阅博客文章[UniTask v2 — 适用于 Unity 的零堆内存分配的async/await,支持异步 LINQ](https://medium.com/@neuecc/unitask-v2-zero-allocation-async-await-for-unity-with-asynchronous-linq-1aa9c96aa7dd))。默认情况下,它缓存所有 promise,但您可以通过调用`TaskPool.SetMaxPoolSize`方法来自定义每种类型的最大缓存大小。`TaskPool.GetCacheSizeInfo`返回池中当前缓存的对象。

```csharp
foreach (var (type, size) in TaskPool.GetCacheSizeInfo())
{
    Debug.Log(type + ":" + size);
}
```

Profiler 下的堆内存分配
---
在 UnityEditor 中,能从 profiler 中看到编译器生成的 AsyncStateMachine 的堆内存分配,但它只出现在Debug(development)构建中。C# 编译器在Debug 构建时将 AsyncStateMachine 生成为类,而在Release 构建时将其生成为结构。

Unity 从2020.1版本开始支持代码优化选项(位于右下角)。

![](https://user-images.githubusercontent.com/46207/89967342-2f944600-dc8c-11ea-99fc-0b74527a16f6.png)

在开发构建中,您可以通过将 C# 编译器优化设置为 release 模式来移除 AsyncStateMachine 的堆内存分配。此优化选项也可以通过`Compilation.CompilationPipeline-codeOptimization`和`Compilation.CodeOptimization`来设置。

UniTaskSynchronizationContext
---
Unity 的默认 SynchronizationContext(`UnitySynchronizationContext`) 在性能方面表现不佳。UniTask 绕过`SynchronizationContext`(和`ExecutionContext`) 因此 UniTask 不使用它,但如果存在`async Task`,则仍然使用它。`UniTaskSynchronizationContext`是`UnitySynchronizationContext`性能更好的替代品。

```csharp
public class SyncContextInjecter
{
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
    public static void Inject()
    {
        SynchronizationContext.SetSynchronizationContext(new UniTaskSynchronizationContext());
    }
}
```

这是一个可选的选择,并不总是推荐;`UniTaskSynchronizationContext`性能不如`async UniTask`,并且不是完整的 UniTask 替代品。它也不保证与`UnitySynchronizationContext`完全兼容

API 文档
---
UniTask 的 API 文档托管在[cysharp.github.io/UniTask](https://cysharp.github.io/UniTask/api/Cysharp.Threading.Tasks.html),使用[DocFX](https://dotnet.github.io/docfx/)和[Cysharp/DocfXTemplate](https://github.com/Cysharp/DocfxTemplate)生成。

例如,UniTask 的工厂方法可以在[UniTask#methods](https://cysharp.github.io/UniTask/api/Cysharp.Threading.Tasks.UniTask.html#methods-1)中查阅。UniTaskAsyncEnumerable 的工厂方法和扩展方法可以在[UniTaskAsyncEnumerable#methods](https://cysharp.github.io/UniTask/api/Cysharp.Threading.Tasks.Linq.UniTaskAsyncEnumerable.html#methods-1)中查阅。

UPM 包
---
### 通过 git URL 安装

需要支持 git 包路径查询参数的 Unity 版本(Unity >= 2019.3.4f1,Unity >= 2020.1a21)。您可以在包管理器中添加`https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask`

![image](https://user-images.githubusercontent.com/46207/79450714-3aadd100-8020-11ea-8aae-b8d87fc4d7be.png)

![image](https://user-images.githubusercontent.com/46207/83702872-e0f17c80-a648-11ea-8183-7469dcd4f810.png)

或在`Packages/manifest.json`中添加`"com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask"` 。

UniTask 使用`*.*.*`发布标签来指定版本,因此如果您要设置指定版本,您可以在后面添加像`#2.1.0`这样的版本标签。例如`https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#2.1.0` 。


关于 .NET Core
---
对于 .NET Core,请使用 NuGet。

> PM> Install-Package [UniTask](https://www.nuget.org/packages/UniTask)

.NET Core 版本的 UniTask 是 Unity 版本的 UniTask 的子集,它移除了依赖 PlayerLoop 的方法。

相比于原生 Task 和 ValueTask,它能以更高的性能运行,但在使用时应注意忽略 ExecutionContext 和 SynchronizationContext。因为它忽略了 ExecutionContext,`AsyncLocal`也不起作用。

如果您在内部使用 UniTask,但将 ValueTask 作为外部 API 提供,您可以编写如下代码(受[PooledAwait](https://github.com/mgravell/PooledAwait)启发)。

```csharp
public class ZeroAllocAsyncAwaitInDotNetCore
{
    public ValueTask<int> DoAsync(int x, int y)
    {
        return Core(this, x, y);

        static async UniTask<int> Core(ZeroAllocAsyncAwaitInDotNetCore self, int x, int y)
        {
            // do anything...
            await Task.Delay(TimeSpan.FromSeconds(x + y));
            await UniTask.Yield();

            return 10;
        }
    }
}

// UniTask 不会返回到原生 SynchronizationContext,但可以使用 `ReturnToCurrentSynchronizationContext`来让他返回
public ValueTask TestAsync()
{
    await using (UniTask.ReturnToCurrentSynchronizationContext())
    {
        await UniTask.SwitchToThreadPool();
        // do anything..
    }
}
```

.NET Core 版本的 UniTask 是为了让用户在与 Unity 共享代码时(例如使用[CysharpOnion](https://github.com/Cysharp/MagicOnion/)),能够将 UniTask 用作接口。.NET Core 版本的 UniTask 使得代码共享更加顺畅。

[Cysharp/ValueTaskSupplement](https://github.com/Cysharp/ValueTaskSupplement)提供了一些实用方法,如 WhenAll,这些方法等效于 UniTask。

许可证
---
此库采用MIT许可证


================================================
FILE: UniTask.NetCore.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31606.5
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniTask.NetCoreTests", "src\UniTask.NetCoreTests\UniTask.NetCoreTests.csproj", "{B3E311A4-70D8-4131-9965-C073A99D201A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniTask.NetCore", "src\UniTask.NetCore\UniTask.NetCore.csproj", "{16EE20D0-7FB1-483A-8467-A5EEDBF1F5BF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniTask.NetCoreSandbox", "src\UniTask.NetCoreSandbox\UniTask.NetCoreSandbox.csproj", "{3915E72E-33E0-4A14-A6D8-872702200E58}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniTask.Analyzer", "src\UniTask.Analyzer\UniTask.Analyzer.csproj", "{0AC6F052-A255-4EE3-9E05-1C02D49AB1C2}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{B3E311A4-70D8-4131-9965-C073A99D201A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{B3E311A4-70D8-4131-9965-C073A99D201A}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{B3E311A4-70D8-4131-9965-C073A99D201A}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{B3E311A4-70D8-4131-9965-C073A99D201A}.Release|Any CPU.Build.0 = Release|Any CPU
		{16EE20D0-7FB1-483A-8467-A5EEDBF1F5BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{16EE20D0-7FB1-483A-8467-A5EEDBF1F5BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{16EE20D0-7FB1-483A-8467-A5EEDBF1F5BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{16EE20D0-7FB1-483A-8467-A5EEDBF1F5BF}.Release|Any CPU.Build.0 = Release|Any CPU
		{3915E72E-33E0-4A14-A6D8-872702200E58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{3915E72E-33E0-4A14-A6D8-872702200E58}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{3915E72E-33E0-4A14-A6D8-872702200E58}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{3915E72E-33E0-4A14-A6D8-872702200E58}.Release|Any CPU.Build.0 = Release|Any CPU
		{0AC6F052-A255-4EE3-9E05-1C02D49AB1C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{0AC6F052-A255-4EE3-9E05-1C02D49AB1C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{0AC6F052-A255-4EE3-9E05-1C02D49AB1C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{0AC6F052-A255-4EE3-9E05-1C02D49AB1C2}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {90F78FCC-7CD4-4E88-A3DB-873F481F8C8B}
	EndGlobalSection
EndGlobal


================================================
FILE: docs/.gitignore
================================================
###############
#    folder   #
###############
/**/DROP/
/**/TEMP/
/**/packages/
/**/bin/
/**/obj/
_site
_DocfxTemplate

================================================
FILE: docs/api/.gitignore
================================================
###############
#  temp file  #
###############
*.yml
.manifest


================================================
FILE: docs/docfx.json
================================================
{
  "metadata": [
    {
      "src": [
        {
          "files": [
            "UniTask/Library/ScriptAssemblies/UniTask*.dll"
          ],
          "exclude": [
            "UniTask/Library/ScriptAssemblies/UniTask.Tests.dll",
            "UniTask/Library/ScriptAssemblies/UniTask.Tests.Editor.dll"
          ],
          "src": "../src"
        }
      ],
      "dest": "api",
      "disableGitFeatures": false,
      "disableDefaultFilter": false
    }
  ],
  "build": {
    "globalMetadata": {
      "_disableContribution": true,
      "_appTitle": "UniTask"
    },
    "content": [
      {
        "files": [
          "api/**.yml",
          "api/index.md"
        ]
      },
      {
        "files": [
          "articles/**.md",
          "articles/**/toc.yml",
          "toc.yml",
          "*.md"
        ]
      }
    ],
    "resource": [
      {
        "files": [
          "images/**"
        ]
      }
    ],
    "overwrite": [
      {
        "files": [
          "apidoc/**.md"
        ],
        "exclude": [
          "obj/**",
          "_site/**"
        ]
      }
    ],
    "dest": "_site",
    "globalMetadataFiles": [],
    "fileMetadataFiles": [],
    "template": [
      "_DocfxTemplate/templates/default-v2.5.2",
      "_DocfxTemplate/templates/cysharp"
    ],
    "postProcessors": [],
    "markdownEngineName": "markdig",
    "noLangKeyword": false,
    "keepFileLink": false,
    "cleanupCacheHistory": false
  }
}


================================================
FILE: docs/index.md
================================================
---
title: Home
---
# UniTask

Provides an efficient async/await integration to Unity.

https://github.com/Cysharp/UniTask


================================================
FILE: docs/toc.yml
================================================
- name: API Documentation
  href: api/
  homepage: api/Cysharp.Threading.Tasks.html

- name: Repository
  href: https://github.com/Cysharp/UniTask
  homepage: https://github.com/Cysharp/UniTask

- name: Releases
  href: https://github.com/Cysharp/UniTask/releases
  homepage: https://github.com/Cysharp/UniTask/releases

================================================
FILE: src/UniTask/Assets/Editor/EditorRunnerChecker.cs
================================================
#if UNITY_EDITOR

using Cysharp.Threading.Tasks;
using System;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.Networking;

public static class EditorRunnerChecker
{
    [MenuItem("Tools/UniTaskEditorRunnerChecker")]
    public static void RunUniTaskAsync()
    {
        RunCore().Forget();
    }

    static async UniTaskVoid RunCore()
    {
        Debug.Log("Start");

        //var r = await UnityWebRequest.Get("https://bing.com/").SendWebRequest().ToUniTask();
        //Debug.Log(r.downloadHandler.text.Substring(0, 100));
        //await UniTask.Yield();

        await UniTask.DelayFrame(30);

        Debug.Log("End");
    }
}

#endif

================================================
FILE: src/UniTask/Assets/Editor/EditorRunnerChecker.cs.meta
================================================
fileFormatVersion: 2
guid: e51b78c06cb410f42b36e0af9de3b065
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: src/UniTask/Assets/Editor/PackageExporter.cs
================================================
#if UNITY_EDITOR

using System;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;

public static class PackageExporter
{
    [MenuItem("Tools/Export Unitypackage")]
    public static void Export()
    {
        var root = "Plugins/UniTask";
        var version = GetVersion(root);

        var fileName = string.IsNullOrEmpty(version) ? "UniTask.unitypackage" : $"UniTask.{version}.unitypackage";
        var exportPath = "./" + fileName;

        var path = Path.Combine(Application.dataPath, root);
        var assets = Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories)
            .Where(x => Path.GetExtension(x) == ".cs" || Path.GetExtension(x) == ".asmdef" || Path.GetExtension(x) == ".json" || Path.GetExtension(x) == ".meta")
            .Select(x => "Assets" + x.Replace(Application.dataPath, "").Replace(@"\", "/"))
            .ToArray();

        UnityEngine.Debug.Log("Export below files" + Environment.NewLine + string.Join(Environment.NewLine, assets));

        AssetDatabase.ExportPackage(
            assets,
            exportPath,
            ExportPackageOptions.Default);

        UnityEngine.Debug.Log("Export complete: " + Path.GetFullPath(exportPath));
    }

    static string GetVersion(string root)
    {
        var version = Environment.GetEnvironmentVariable("UNITY_PACKAGE_VERSION");
        var versionJson = Path.Combine(Application.dataPath, root, "package.json");

        if (File.Exists(versionJson))
        {
            var v = JsonUtility.FromJson<Version>(File.ReadAllText(versionJson));

            if (!string.IsNullOrEmpty(version))
            {
                if (v.version != version)
                {
                    var msg = $"package.json and env version are mismatched. UNITY_PACKAGE_VERSION:{version}, package.json:{v.version}";

                    if (Application.isBatchMode)
                    {
                        Console.WriteLine(msg);
                        Application.Quit(1);
                    }

                    throw new Exception("package.json and env version are mismatched.");
                }
            }

            version = v.version;
        }

        return version;
    }

    public class Version
    {
        public string version;
    }
}

#endif

================================================
FILE: src/UniTask/Assets/Editor/PackageExporter.cs.meta
================================================
fileFormatVersion: 2
guid: af97405af79afbb4e9f7f49f30088474
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: src/UniTask/Assets/Editor.meta
================================================
fileFormatVersion: 2
guid: 99c8676e874bf0343b421d3527868f16
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Editor/SplitterGUILayout.cs
================================================
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member

using System;
using System.Linq;
using System.Reflection;
using UnityEditor;
using UnityEngine;

namespace Cysharp.Threading.Tasks.Editor
{
    // reflection call of UnityEditor.SplitterGUILayout
    internal static class SplitterGUILayout
    {
        static BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static;

        static Lazy<Type> splitterStateType = new Lazy<Type>(() =>
        {
            var type = typeof(EditorWindow).Assembly.GetTypes().First(x => x.FullName == "UnityEditor.SplitterState");
            return type;
        });

        static Lazy<ConstructorInfo> splitterStateCtor = new Lazy<ConstructorInfo>(() =>
        {
            var type = splitterStateType.Value;
            return type.GetConstructor(flags, null, new Type[] { typeof(float[]), typeof(int[]), typeof(int[]) }, null);
        });

        static Lazy<Type> splitterGUILayoutType = new Lazy<Type>(() =>
        {
            var type = typeof(EditorWindow).Assembly.GetTypes().First(x => x.FullName == "UnityEditor.SplitterGUILayout");
            return type;
        });

        static Lazy<MethodInfo> beginVerticalSplit = new Lazy<MethodInfo>(() =>
        {
            var type = splitterGUILayoutType.Value;
            return type.GetMethod("BeginVerticalSplit", flags, null, new Type[] { splitterStateType.Value, typeof(GUILayoutOption[]) }, null);
        });

        static Lazy<MethodInfo> endVerticalSplit = new Lazy<MethodInfo>(() =>
        {
            var type = splitterGUILayoutType.Value;
            return type.GetMethod("EndVerticalSplit", flags, null, Type.EmptyTypes, null);
        });

        public static object CreateSplitterState(float[] relativeSizes, int[] minSizes, int[] maxSizes)
        {
            return splitterStateCtor.Value.Invoke(new object[] { relativeSizes, minSizes, maxSizes });
        }

        public static void BeginVerticalSplit(object splitterState, params GUILayoutOption[] options)
        {
            beginVerticalSplit.Value.Invoke(null, new object[] { splitterState, options });
        }

        public static void EndVerticalSplit()
        {
            endVerticalSplit.Value.Invoke(null, Type.EmptyTypes);
        }
    }
}



================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Editor/SplitterGUILayout.cs.meta
================================================
fileFormatVersion: 2
guid: 40ef2e46f900131419e869398a8d3c9d
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Editor/UniTask.Editor.asmdef
================================================
{
    "name": "UniTask.Editor",
    "references": [
        "UniTask"
    ],
    "includePlatforms": [
        "Editor"
    ],
    "excludePlatforms": [],
    "allowUnsafeCode": false,
    "overrideReferences": false,
    "precompiledReferences": [],
    "autoReferenced": false,
    "defineConstraints": [],
    "versionDefines": [],
    "noEngineReferences": false
}

================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Editor/UniTask.Editor.asmdef.meta
================================================
fileFormatVersion: 2
guid: 4129704b5a1a13841ba16f230bf24a57
AssemblyDefinitionImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Editor/UniTaskTrackerTreeView.cs
================================================
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member

using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System;
using UnityEditor.IMGUI.Controls;
using Cysharp.Threading.Tasks.Internal;
using System.Text;
using System.Text.RegularExpressions;

namespace Cysharp.Threading.Tasks.Editor
{
    public class UniTaskTrackerViewItem : TreeViewItem
    {
        static Regex removeHref = new Regex("<a href.+>(.+)</a>", RegexOptions.Compiled);

        public string TaskType { get; set; }
        public string Elapsed { get; set; }
        public string Status { get; set; }

        string position;
        public string Position
        {
            get { return position; }
            set
            {
                position = value;
                PositionFirstLine = GetFirstLine(position);
            }
        }

        public string PositionFirstLine { get; private set; }

        static string GetFirstLine(string str)
        {
            var sb = new StringBuilder();
            for (int i = 0; i < str.Length; i++)
            {
                if (str[i] == '\r' || str[i] == '\n')
                {
                    break;
                }
                sb.Append(str[i]);
            }

            return removeHref.Replace(sb.ToString(), "$1");
        }

        public UniTaskTrackerViewItem(int id) : base(id)
        {

        }
    }

    public class UniTaskTrackerTreeView : TreeView
    {
        const string sortedColumnIndexStateKey = "UniTaskTrackerTreeView_sortedColumnIndex";

        public IReadOnlyList<TreeViewItem> CurrentBindingItems;

        public UniTaskTrackerTreeView()
            : this(new TreeViewState(), new MultiColumnHeader(new MultiColumnHeaderState(new[]
            {
                new MultiColumnHeaderState.Column() { headerContent = new GUIContent("TaskType"), width = 20},
                new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Elapsed"), width = 10},
                new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Status"), width = 10},
                new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Position")},
            })))
        {
        }

        UniTaskTrackerTreeView(TreeViewState state, MultiColumnHeader header)
            : base(state, header)
        {
            rowHeight = 20;
            showAlternatingRowBackgrounds = true;
            showBorder = true;
            header.sortingChanged += Header_sortingChanged;

            header.ResizeToFit();
            Reload();

            header.sortedColumnIndex = SessionState.GetInt(sortedColumnIndexStateKey, 1);
        }

        public void ReloadAndSort()
        {
            var currentSelected = this.state.selectedIDs;
            Reload();
            Header_sortingChanged(this.multiColumnHeader);
            this.state.selectedIDs = currentSelected;
        }

        private void Header_sortingChanged(MultiColumnHeader multiColumnHeader)
        {
            SessionState.SetInt(sortedColumnIndexStateKey, multiColumnHeader.sortedColumnIndex);
            var index = multiColumnHeader.sortedColumnIndex;
            var ascending = multiColumnHeader.IsSortedAscending(multiColumnHeader.sortedColumnIndex);

            var items = rootItem.children.Cast<UniTaskTrackerViewItem>();

            IOrderedEnumerable<UniTaskTrackerViewItem> orderedEnumerable;
            switch (index)
            {
                case 0:
                    orderedEnumerable = ascending ? items.OrderBy(item => item.TaskType) : items.OrderByDescending(item => item.TaskType);
                    break;
                case 1:
                    orderedEnumerable = ascending ? items.OrderBy(item => double.Parse(item.Elapsed)) : items.OrderByDescending(item => double.Parse(item.Elapsed));
                    break;
                case 2:
                    orderedEnumerable = ascending ? items.OrderBy(item => item.Status) : items.OrderByDescending(item => item.Elapsed);
                    break;
                case 3:
                    orderedEnumerable = ascending ? items.OrderBy(item => item.Position) : items.OrderByDescending(item => item.PositionFirstLine);
                    break;
                default:
                    throw new ArgumentOutOfRangeException(nameof(index), index, null);
            }

            CurrentBindingItems = rootItem.children = orderedEnumerable.Cast<TreeViewItem>().ToList();
            BuildRows(rootItem);
        }

        protected override TreeViewItem BuildRoot()
        {
            var root = new TreeViewItem { depth = -1 };

            var children = new List<TreeViewItem>();

            TaskTracker.ForEachActiveTask((trackingId, awaiterType, status, created, stackTrace) =>
            {
                children.Add(new UniTaskTrackerViewItem(trackingId) { TaskType = awaiterType, Status = status.ToString(), Elapsed = (DateTime.UtcNow - created).TotalSeconds.ToString("00.00"), Position = stackTrace });
            });

            CurrentBindingItems = children;
            root.children = CurrentBindingItems as List<TreeViewItem>;
            return root;
        }

        protected override bool CanMultiSelect(TreeViewItem item)
        {
            return false;
        }

        protected override void RowGUI(RowGUIArgs args)
        {
            var item = args.item as UniTaskTrackerViewItem;

            for (var visibleColumnIndex = 0; visibleColumnIndex < args.GetNumVisibleColumns(); visibleColumnIndex++)
            {
                var rect = args.GetCellRect(visibleColumnIndex);
                var columnIndex = args.GetColumn(visibleColumnIndex);

                var labelStyle = args.selected ? EditorStyles.whiteLabel : EditorStyles.label;
                labelStyle.alignment = TextAnchor.MiddleLeft;
                switch (columnIndex)
                {
                    case 0:
                        EditorGUI.LabelField(rect, item.TaskType, labelStyle);
                        break;
                    case 1:
                        EditorGUI.LabelField(rect, item.Elapsed, labelStyle);
                        break;
                    case 2:
                        EditorGUI.LabelField(rect, item.Status, labelStyle);
                        break;
                    case 3:
                        EditorGUI.LabelField(rect, item.PositionFirstLine, labelStyle);
                        break;
                    default:
                        throw new ArgumentOutOfRangeException(nameof(columnIndex), columnIndex, null);
                }
            }
        }
    }

}



================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Editor/UniTaskTrackerTreeView.cs.meta
================================================
fileFormatVersion: 2
guid: 52e2d973a2156674e8c1c9433ed031f7
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Editor/UniTaskTrackerWindow.cs
================================================
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member

using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System;
using UnityEditor.IMGUI.Controls;
using Cysharp.Threading.Tasks.Internal;

namespace Cysharp.Threading.Tasks.Editor
{
    public class UniTaskTrackerWindow : EditorWindow
    {
        static int interval;

        static UniTaskTrackerWindow window;

        [MenuItem("Window/UniTask Tracker")]
        public static void OpenWindow()
        {
            if (window != null)
            {
                window.Close();
            }

            // will called OnEnable(singleton instance will be set).
            GetWindow<UniTaskTrackerWindow>("UniTask Tracker").Show();
        }

        static readonly GUILayoutOption[] EmptyLayoutOption = new GUILayoutOption[0];

        UniTaskTrackerTreeView treeView;
        object splitterState;

        void OnEnable()
        {
            window = this; // set singleton.
            splitterState = SplitterGUILayout.CreateSplitterState(new float[] { 75f, 25f }, new int[] { 32, 32 }, null);
            treeView = new UniTaskTrackerTreeView();
            TaskTracker.EditorEnableState.EnableAutoReload = EditorPrefs.GetBool(TaskTracker.EnableAutoReloadKey, false);
            TaskTracker.EditorEnableState.EnableTracking = EditorPrefs.GetBool(TaskTracker.EnableTrackingKey, false);
            TaskTracker.EditorEnableState.EnableStackTrace = EditorPrefs.GetBool(TaskTracker.EnableStackTraceKey, false);
        }

        void OnGUI()
        {
            // Head
            RenderHeadPanel();

            // Splittable
            SplitterGUILayout.BeginVerticalSplit(this.splitterState, EmptyLayoutOption);
            {
                // Column Tabble
                RenderTable();

                // StackTrace details
                RenderDetailsPanel();
            }
            SplitterGUILayout.EndVerticalSplit();
        }

        #region HeadPanel

        public static bool EnableAutoReload => TaskTracker.EditorEnableState.EnableAutoReload;
        public static bool EnableTracking => TaskTracker.EditorEnableState.EnableTracking;
        public static bool EnableStackTrace => TaskTracker.EditorEnableState.EnableStackTrace;
        static readonly GUIContent EnableAutoReloadHeadContent = EditorGUIUtility.TrTextContent("Enable AutoReload", "Reload automatically.", (Texture)null);
        static readonly GUIContent ReloadHeadContent = EditorGUIUtility.TrTextContent("Reload", "Reload View.", (Texture)null);
        static readonly GUIContent GCHeadContent = EditorGUIUtility.TrTextContent("GC.Collect", "Invoke GC.Collect.", (Texture)null);
        static readonly GUIContent EnableTrackingHeadContent = EditorGUIUtility.TrTextContent("Enable Tracking", "Start to track async/await UniTask. Performance impact: low", (Texture)null);
        static readonly GUIContent EnableStackTraceHeadContent = EditorGUIUtility.TrTextContent("Enable StackTrace", "Capture StackTrace when task is started. Performance impact: high", (Texture)null);

        // [Enable Tracking] | [Enable StackTrace]
        void RenderHeadPanel()
        {
            EditorGUILayout.BeginVertical(EmptyLayoutOption);
            EditorGUILayout.BeginHorizontal(EditorStyles.toolbar, EmptyLayoutOption);

            if (GUILayout.Toggle(EnableAutoReload, EnableAutoReloadHeadContent, EditorStyles.toolbarButton, EmptyLayoutOption) != EnableAutoReload)
            {
                TaskTracker.EditorEnableState.EnableAutoReload = !EnableAutoReload;
            }

            if (GUILayout.Toggle(EnableTracking, EnableTrackingHeadContent, EditorStyles.toolbarButton, EmptyLayoutOption) != EnableTracking)
            {
                TaskTracker.EditorEnableState.EnableTracking = !EnableTracking;
            }

            if (GUILayout.Toggle(EnableStackTrace, EnableStackTraceHeadContent, EditorStyles.toolbarButton, EmptyLayoutOption) != EnableStackTrace)
            {
                TaskTracker.EditorEnableState.EnableStackTrace = !EnableStackTrace;
            }

            GUILayout.FlexibleSpace();

            if (GUILayout.Button(ReloadHeadContent, EditorStyles.toolbarButton, EmptyLayoutOption))
            {
                TaskTracker.CheckAndResetDirty();
                treeView.ReloadAndSort();
                Repaint();
            }

            if (GUILayout.Button(GCHeadContent, EditorStyles.toolbarButton, EmptyLayoutOption))
            {
                GC.Collect(0);
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndVertical();
        }

        #endregion

        #region TableColumn

        Vector2 tableScroll;
        GUIStyle tableListStyle;

        void RenderTable()
        {
            if (tableListStyle == null)
            {
                tableListStyle = new GUIStyle("CN Box");
                tableListStyle.margin.top = 0;
                tableListStyle.padding.left = 3;
            }

            EditorGUILayout.BeginVertical(tableListStyle, EmptyLayoutOption);

            this.tableScroll = EditorGUILayout.BeginScrollView(this.tableScroll, new GUILayoutOption[]
            {
                GUILayout.ExpandWidth(true),
                GUILayout.MaxWidth(2000f)
            });
            var controlRect = EditorGUILayout.GetControlRect(new GUILayoutOption[]
            {
                GUILayout.ExpandHeight(true),
                GUILayout.ExpandWidth(true)
            });


            treeView?.OnGUI(controlRect);

            EditorGUILayout.EndScrollView();
            EditorGUILayout.EndVertical();
        }

        private void Update()
        {
            if (EnableAutoReload)
            {
                if (interval++ % 120 == 0)
                {
                    if (TaskTracker.CheckAndResetDirty())
                    {
                        treeView.ReloadAndSort();
                        Repaint();
                    }
                }
            }
        }

        #endregion

        #region Details

        static GUIStyle detailsStyle;
        Vector2 detailsScroll;

        void RenderDetailsPanel()
        {
            if (detailsStyle == null)
            {
                detailsStyle = new GUIStyle("CN Message");
                detailsStyle.wordWrap = false;
                detailsStyle.stretchHeight = true;
                detailsStyle.margin.right = 15;
            }

            string message = "";
            var selected = treeView.state.selectedIDs;
            if (selected.Count > 0)
            {
                var first = selected[0];
                var item = treeView.CurrentBindingItems.FirstOrDefault(x => x.id == first) as UniTaskTrackerViewItem;
                if (item != null)
                {
                    message = item.Position;
                }
            }

            detailsScroll = EditorGUILayout.BeginScrollView(this.detailsScroll, EmptyLayoutOption);
            var vector = detailsStyle.CalcSize(new GUIContent(message));
            EditorGUILayout.SelectableLabel(message, detailsStyle, new GUILayoutOption[]
            {
                GUILayout.ExpandHeight(true),
                GUILayout.ExpandWidth(true),
                GUILayout.MinWidth(vector.x),
                GUILayout.MinHeight(vector.y)
            });
            EditorGUILayout.EndScrollView();
        }

        #endregion
    }
}



================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Editor/UniTaskTrackerWindow.cs.meta
================================================
fileFormatVersion: 2
guid: 5bee3e3860e37484aa3b861bf76d129f
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Editor.meta
================================================
fileFormatVersion: 2
guid: 275b87293edc6634f9d72387851dbbdf
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncLazy.cs
================================================
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member

using System;
using System.Threading;

namespace Cysharp.Threading.Tasks
{
    public class AsyncLazy
    {
        static Action<object> continuation = SetCompletionSource;

        Func<UniTask> taskFactory;
        UniTaskCompletionSource completionSource;
        UniTask.Awaiter awaiter;

        object syncLock;
        bool initialized;

        public AsyncLazy(Func<UniTask> taskFactory)
        {
            this.taskFactory = taskFactory;
            this.completionSource = new UniTaskCompletionSource();
            this.syncLock = new object();
            this.initialized = false;
        }

        internal AsyncLazy(UniTask task)
        {
            this.taskFactory = null;
            this.completionSource = new UniTaskCompletionSource();
            this.syncLock = null;
            this.initialized = true;

            var awaiter = task.GetAwaiter();
            if (awaiter.IsCompleted)
            {
                SetCompletionSource(awaiter);
            }
            else
            {
                this.awaiter = awaiter;
                awaiter.SourceOnCompleted(continuation, this);
            }
        }

        public UniTask Task
        {
            get
            {
                EnsureInitialized();
                return completionSource.Task;
            }
        }


        public UniTask.Awaiter GetAwaiter() => Task.GetAwaiter();

        void EnsureInitialized()
        {
            if (Volatile.Read(ref initialized))
            {
                return;
            }

            EnsureInitializedCore();
        }

        void EnsureInitializedCore()
        {
            lock (syncLock)
            {
                if (!Volatile.Read(ref initialized))
                {
                    var f = Interlocked.Exchange(ref taskFactory, null);
                    if (f != null)
                    {
                        var task = f();
                        var awaiter = task.GetAwaiter();
                        if (awaiter.IsCompleted)
                        {
                            SetCompletionSource(awaiter);
                        }
                        else
                        {
                            this.awaiter = awaiter;
                            awaiter.SourceOnCompleted(continuation, this);
                        }

                        Volatile.Write(ref initialized, true);
                    }
                }
            }
        }

        void SetCompletionSource(in UniTask.Awaiter awaiter)
        {
            try
            {
                awaiter.GetResult();
                completionSource.TrySetResult();
            }
            catch (Exception ex)
            {
                completionSource.TrySetException(ex);
            }
        }

        static void SetCompletionSource(object state)
        {
            var self = (AsyncLazy)state;
            try
            {
                self.awaiter.GetResult();
                self.completionSource.TrySetResult();
            }
            catch (Exception ex)
            {
                self.completionSource.TrySetException(ex);
            }
            finally
            {
                self.awaiter = default;
            }
        }
    }

    public class AsyncLazy<T>
    {
        static Action<object> continuation = SetCompletionSource;

        Func<UniTask<T>> taskFactory;
        UniTaskCompletionSource<T> completionSource;
        UniTask<T>.Awaiter awaiter;

        object syncLock;
        bool initialized;

        public AsyncLazy(Func<UniTask<T>> taskFactory)
        {
            this.taskFactory = taskFactory;
            this.completionSource = new UniTaskCompletionSource<T>();
            this.syncLock = new object();
            this.initialized = false;
        }

        internal AsyncLazy(UniTask<T> task)
        {
            this.taskFactory = null;
            this.completionSource = new UniTaskCompletionSource<T>();
            this.syncLock = null;
            this.initialized = true;

            var awaiter = task.GetAwaiter();
            if (awaiter.IsCompleted)
            {
                SetCompletionSource(awaiter);
            }
            else
            {
                this.awaiter = awaiter;
                awaiter.SourceOnCompleted(continuation, this);
            }
        }

        public UniTask<T> Task
        {
            get
            {
                EnsureInitialized();
                return completionSource.Task;
            }
        }


        public UniTask<T>.Awaiter GetAwaiter() => Task.GetAwaiter();

        void EnsureInitialized()
        {
            if (Volatile.Read(ref initialized))
            {
                return;
            }

            EnsureInitializedCore();
        }

        void EnsureInitializedCore()
        {
            lock (syncLock)
            {
                if (!Volatile.Read(ref initialized))
                {
                    var f = Interlocked.Exchange(ref taskFactory, null);
                    if (f != null)
                    {
                        var task = f();
                        var awaiter = task.GetAwaiter();
                        if (awaiter.IsCompleted)
                        {
                            SetCompletionSource(awaiter);
                        }
                        else
                        {
                            this.awaiter = awaiter;
                            awaiter.SourceOnCompleted(continuation, this);
                        }

                        Volatile.Write(ref initialized, true);
                    }
                }
            }
        }

        void SetCompletionSource(in UniTask<T>.Awaiter awaiter)
        {
            try
            {
                var result = awaiter.GetResult();
                completionSource.TrySetResult(result);
            }
            catch (Exception ex)
            {
                completionSource.TrySetException(ex);
            }
        }

        static void SetCompletionSource(object state)
        {
            var self = (AsyncLazy<T>)state;
            try
            {
                var result = self.awaiter.GetResult();
                self.completionSource.TrySetResult(result);
            }
            catch (Exception ex)
            {
                self.completionSource.TrySetException(ex);
            }
            finally
            {
                self.awaiter = default;
            }
        }
    }
}


================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncLazy.cs.meta
================================================
fileFormatVersion: 2
guid: 01d1404ca421466419a7db7340ff5e77
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncReactiveProperty.cs
================================================
using System;
using System.Threading;

namespace Cysharp.Threading.Tasks
{
    public interface IReadOnlyAsyncReactiveProperty<T> : IUniTaskAsyncEnumerable<T>
    {
        T Value { get; }
        IUniTaskAsyncEnumerable<T> WithoutCurrent();
        UniTask<T> WaitAsync(CancellationToken cancellationToken = default);
    }

    public interface IAsyncReactiveProperty<T> : IReadOnlyAsyncReactiveProperty<T>
    {
        new T Value { get; set; }
    }

    [Serializable]
    public class AsyncReactiveProperty<T> : IAsyncReactiveProperty<T>, IDisposable
    {
        TriggerEvent<T> triggerEvent;

#if UNITY_2018_3_OR_NEWER
        [UnityEngine.SerializeField]
#endif
        T latestValue;

        public T Value
        {
            get
            {
                return latestValue;
            }
            set
            {
                this.latestValue = value;
                triggerEvent.SetResult(value);
            }
        }

        public AsyncReactiveProperty(T value)
        {
            this.latestValue = value;
            this.triggerEvent = default;
        }

        public IUniTaskAsyncEnumerable<T> WithoutCurrent()
        {
            return new WithoutCurrentEnumerable(this);
        }

        public IUniTaskAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken cancellationToken)
        {
            return new Enumerator(this, cancellationToken, true);
        }

        public void Dispose()
        {
            triggerEvent.SetCompleted();
        }

        public static implicit operator T(AsyncReactiveProperty<T> value)
        {
            return value.Value;
        }

        public override string ToString()
        {
            if (isValueType) return latestValue.ToString();
            return latestValue?.ToString();
        }

        public UniTask<T> WaitAsync(CancellationToken cancellationToken = default)
        {
            return new UniTask<T>(WaitAsyncSource.Create(this, cancellationToken, out var token), token);
        }

        static bool isValueType;

        static AsyncReactiveProperty()
        {
            isValueType = typeof(T).IsValueType;
        }

        sealed class WaitAsyncSource : IUniTaskSource<T>, ITriggerHandler<T>, ITaskPoolNode<WaitAsyncSource>
        {
            static Action<object> cancellationCallback = CancellationCallback;

            static TaskPool<WaitAsyncSource> pool;
            WaitAsyncSource nextNode;
            ref WaitAsyncSource ITaskPoolNode<WaitAsyncSource>.NextNode => ref nextNode;

            static WaitAsyncSource()
            {
                TaskPool.RegisterSizeGetter(typeof(WaitAsyncSource), () => pool.Size);
            }

            AsyncReactiveProperty<T> parent;
            CancellationToken cancellationToken;
            CancellationTokenRegistration cancellationTokenRegistration;
            UniTaskCompletionSourceCore<T> core;

            WaitAsyncSource()
            {
            }

            public static IUniTaskSource<T> Create(AsyncReactiveProperty<T> parent, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return AutoResetUniTaskCompletionSource<T>.CreateFromCanceled(cancellationToken, out token);
                }

                if (!pool.TryPop(out var result))
                {
                    result = new WaitAsyncSource();
                }

                result.parent = parent;
                result.cancellationToken = cancellationToken;

                if (cancellationToken.CanBeCanceled)
                {
                    result.cancellationTokenRegistration = cancellationToken.RegisterWithoutCaptureExecutionContext(cancellationCallback, result);
                }

                result.parent.triggerEvent.Add(result);

                TaskTracker.TrackActiveTask(result, 3);

                token = result.core.Version;
                return result;
            }

            bool TryReturn()
            {
                TaskTracker.RemoveTracking(this);
                core.Reset();
                cancellationTokenRegistration.Dispose();
                cancellationTokenRegistration = default;
                parent.triggerEvent.Remove(this);
                parent = null;
                cancellationToken = default;
                return pool.TryPush(this);
            }

            static void CancellationCallback(object state)
            {
                var self = (WaitAsyncSource)state;
                self.OnCanceled(self.cancellationToken);
            }

            // IUniTaskSource

            public T GetResult(short token)
            {
                try
                {
                    return core.GetResult(token);
                }
                finally
                {
                    TryReturn();
                }
            }

            void IUniTaskSource.GetResult(short token)
            {
                GetResult(token);
            }

            public void OnCompleted(Action<object> continuation, object state, short token)
            {
                core.OnCompleted(continuation, state, token);
            }

            public UniTaskStatus GetStatus(short token)
            {
                return core.GetStatus(token);
            }

            public UniTaskStatus UnsafeGetStatus()
            {
                return core.UnsafeGetStatus();
            }

            // ITriggerHandler

            ITriggerHandler<T> ITriggerHandler<T>.Prev { get; set; }
            ITriggerHandler<T> ITriggerHandler<T>.Next { get; set; }

            public void OnCanceled(CancellationToken cancellationToken)
            {
                core.TrySetCanceled(cancellationToken);
            }

            public void OnCompleted()
            {
                // Complete as Cancel.
                core.TrySetCanceled(CancellationToken.None);
            }

            public void OnError(Exception ex)
            {
                core.TrySetException(ex);
            }

            public void OnNext(T value)
            {
                core.TrySetResult(value);
            }
        }

        sealed class WithoutCurrentEnumerable : IUniTaskAsyncEnumerable<T>
        {
            readonly AsyncReactiveProperty<T> parent;

            public WithoutCurrentEnumerable(AsyncReactiveProperty<T> parent)
            {
                this.parent = parent;
            }

            public IUniTaskAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken cancellationToken = default)
            {
                return new Enumerator(parent, cancellationToken, false);
            }
        }

        sealed class Enumerator : MoveNextSource, IUniTaskAsyncEnumerator<T>, ITriggerHandler<T>
        {
            static Action<object> cancellationCallback = CancellationCallback;

            readonly AsyncReactiveProperty<T> parent;
            readonly CancellationToken cancellationToken;
            readonly CancellationTokenRegistration cancellationTokenRegistration;
            T value;
            bool isDisposed;
            bool firstCall;

            public Enumerator(AsyncReactiveProperty<T> parent, CancellationToken cancellationToken, bool publishCurrentValue)
            {
                this.parent = parent;
                this.cancellationToken = cancellationToken;
                this.firstCall = publishCurrentValue;

                parent.triggerEvent.Add(this);
                TaskTracker.TrackActiveTask(this, 3);

                if (cancellationToken.CanBeCanceled)
                {
                    cancellationTokenRegistration = cancellationToken.RegisterWithoutCaptureExecutionContext(cancellationCallback, this);
                }
            }

            public T Current => value;

            ITriggerHandler<T> ITriggerHandler<T>.Prev { get; set; }
            ITriggerHandler<T> ITriggerHandler<T>.Next { get; set; }

            public UniTask<bool> MoveNextAsync()
            {
                // raise latest value on first call.
                if (firstCall)
                {
                    firstCall = false;
                    value = parent.Value;
                    return CompletedTasks.True;
                }

                completionSource.Reset();
                return new UniTask<bool>(this, completionSource.Version);
            }

            public UniTask DisposeAsync()
            {
                if (!isDisposed)
                {
                    isDisposed = true;
                    TaskTracker.RemoveTracking(this);
                    completionSource.TrySetCanceled(cancellationToken);
                    parent.triggerEvent.Remove(this);
                }
                return default;
            }

            public void OnNext(T value)
            {
                this.value = value;
                completionSource.TrySetResult(true);
            }

            public void OnCanceled(CancellationToken cancellationToken)
            {
                DisposeAsync().Forget();
            }

            public void OnCompleted()
            {
                completionSource.TrySetResult(false);
            }

            public void OnError(Exception ex)
            {
                completionSource.TrySetException(ex);
            }

            static void CancellationCallback(object state)
            {
                var self = (Enumerator)state;
                self.DisposeAsync().Forget();
            }
        }
    }

    public class ReadOnlyAsyncReactiveProperty<T> : IReadOnlyAsyncReactiveProperty<T>, IDisposable
    {
        TriggerEvent<T> triggerEvent;

        T latestValue;
        IUniTaskAsyncEnumerator<T> enumerator;

        public T Value
        {
            get
            {
                return latestValue;
            }
        }

        public ReadOnlyAsyncReactiveProperty(T initialValue, IUniTaskAsyncEnumerable<T> source, CancellationToken cancellationToken)
        {
            latestValue = initialValue;
            ConsumeEnumerator(source, cancellationToken).Forget();
        }

        public ReadOnlyAsyncReactiveProperty(IUniTaskAsyncEnumerable<T> source, CancellationToken cancellationToken)
        {
            ConsumeEnumerator(source, cancellationToken).Forget();
        }

        async UniTaskVoid ConsumeEnumerator(IUniTaskAsyncEnumerable<T> source, CancellationToken cancellationToken)
        {
            enumerator = source.GetAsyncEnumerator(cancellationToken);
            try
            {
                while (await enumerator.MoveNextAsync())
                {
                    var value = enumerator.Current;
                    this.latestValue = value;
                    triggerEvent.SetResult(value);
                }
            }
            finally
            {
                await enumerator.DisposeAsync();
                enumerator = null;
            }
        }

        public IUniTaskAsyncEnumerable<T> WithoutCurrent()
        {
            return new WithoutCurrentEnumerable(this);
        }

        public IUniTaskAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken cancellationToken)
        {
            return new Enumerator(this, cancellationToken, true);
        }

        public void Dispose()
        {
            if (enumerator != null)
            {
                enumerator.DisposeAsync().Forget();
            }

            triggerEvent.SetCompleted();
        }

        public static implicit operator T(ReadOnlyAsyncReactiveProperty<T> value)
        {
            return value.Value;
        }

        public override string ToString()
        {
            if (isValueType) return latestValue.ToString();
            return latestValue?.ToString();
        }

        public UniTask<T> WaitAsync(CancellationToken cancellationToken = default)
        {
            return new UniTask<T>(WaitAsyncSource.Create(this, cancellationToken, out var token), token);
        }

        static bool isValueType;

        static ReadOnlyAsyncReactiveProperty()
        {
            isValueType = typeof(T).IsValueType;
        }

        sealed class WaitAsyncSource : IUniTaskSource<T>, ITriggerHandler<T>, ITaskPoolNode<WaitAsyncSource>
        {
            static Action<object> cancellationCallback = CancellationCallback;

            static TaskPool<WaitAsyncSource> pool;
            WaitAsyncSource nextNode;
            ref WaitAsyncSource ITaskPoolNode<WaitAsyncSource>.NextNode => ref nextNode;

            static WaitAsyncSource()
            {
                TaskPool.RegisterSizeGetter(typeof(WaitAsyncSource), () => pool.Size);
            }

            ReadOnlyAsyncReactiveProperty<T> parent;
            CancellationToken cancellationToken;
            CancellationTokenRegistration cancellationTokenRegistration;
            UniTaskCompletionSourceCore<T> core;

            WaitAsyncSource()
            {
            }

            public static IUniTaskSource<T> Create(ReadOnlyAsyncReactiveProperty<T> parent, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return AutoResetUniTaskCompletionSource<T>.CreateFromCanceled(cancellationToken, out token);
                }

                if (!pool.TryPop(out var result))
                {
                    result = new WaitAsyncSource();
                }

                result.parent = parent;
                result.cancellationToken = cancellationToken;

                if (cancellationToken.CanBeCanceled)
                {
                    result.cancellationTokenRegistration = cancellationToken.RegisterWithoutCaptureExecutionContext(cancellationCallback, result);
                }

                result.parent.triggerEvent.Add(result);

                TaskTracker.TrackActiveTask(result, 3);

                token = result.core.Version;
                return result;
            }

            bool TryReturn()
            {
                TaskTracker.RemoveTracking(this);
                core.Reset();
                cancellationTokenRegistration.Dispose();
                cancellationTokenRegistration = default;
                parent.triggerEvent.Remove(this);
                parent = null;
                cancellationToken = default;
                return pool.TryPush(this);
            }

            static void CancellationCallback(object state)
            {
                var self = (WaitAsyncSource)state;
                self.OnCanceled(self.cancellationToken);
            }

            // IUniTaskSource

            public T GetResult(short token)
            {
                try
                {
                    return core.GetResult(token);
                }
                finally
                {
                    TryReturn();
                }
            }

            void IUniTaskSource.GetResult(short token)
            {
                GetResult(token);
            }

            public void OnCompleted(Action<object> continuation, object state, short token)
            {
                core.OnCompleted(continuation, state, token);
            }

            public UniTaskStatus GetStatus(short token)
            {
                return core.GetStatus(token);
            }

            public UniTaskStatus UnsafeGetStatus()
            {
                return core.UnsafeGetStatus();
            }

            // ITriggerHandler

            ITriggerHandler<T> ITriggerHandler<T>.Prev { get; set; }
            ITriggerHandler<T> ITriggerHandler<T>.Next { get; set; }

            public void OnCanceled(CancellationToken cancellationToken)
            {
                core.TrySetCanceled(cancellationToken);
            }

            public void OnCompleted()
            {
                // Complete as Cancel.
                core.TrySetCanceled(CancellationToken.None);
            }

            public void OnError(Exception ex)
            {
                core.TrySetException(ex);
            }

            public void OnNext(T value)
            {
                core.TrySetResult(value);
            }
        }

        sealed class WithoutCurrentEnumerable : IUniTaskAsyncEnumerable<T>
        {
            readonly ReadOnlyAsyncReactiveProperty<T> parent;

            public WithoutCurrentEnumerable(ReadOnlyAsyncReactiveProperty<T> parent)
            {
                this.parent = parent;
            }

            public IUniTaskAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken cancellationToken = default)
            {
                return new Enumerator(parent, cancellationToken, false);
            }
        }

        sealed class Enumerator : MoveNextSource, IUniTaskAsyncEnumerator<T>, ITriggerHandler<T>
        {
            static Action<object> cancellationCallback = CancellationCallback;

            readonly ReadOnlyAsyncReactiveProperty<T> parent;
            readonly CancellationToken cancellationToken;
            readonly CancellationTokenRegistration cancellationTokenRegistration;
            T value;
            bool isDisposed;
            bool firstCall;

            public Enumerator(ReadOnlyAsyncReactiveProperty<T> parent, CancellationToken cancellationToken, bool publishCurrentValue)
            {
                this.parent = parent;
                this.cancellationToken = cancellationToken;
                this.firstCall = publishCurrentValue;

                parent.triggerEvent.Add(this);
                TaskTracker.TrackActiveTask(this, 3);

                if (cancellationToken.CanBeCanceled)
                {
                    cancellationTokenRegistration = cancellationToken.RegisterWithoutCaptureExecutionContext(cancellationCallback, this);
                }
            }

            public T Current => value;
            ITriggerHandler<T> ITriggerHandler<T>.Prev { get; set; }
            ITriggerHandler<T> ITriggerHandler<T>.Next { get; set; }

            public UniTask<bool> MoveNextAsync()
            {
                // raise latest value on first call.
                if (firstCall)
                {
                    firstCall = false;
                    value = parent.Value;
                    return CompletedTasks.True;
                }

                completionSource.Reset();
                return new UniTask<bool>(this, completionSource.Version);
            }

            public UniTask DisposeAsync()
            {
                if (!isDisposed)
                {
                    isDisposed = true;
                    TaskTracker.RemoveTracking(this);
                    completionSource.TrySetCanceled(cancellationToken);
                    parent.triggerEvent.Remove(this);
                }
                return default;
            }

            public void OnNext(T value)
            {
                this.value = value;
                completionSource.TrySetResult(true);
            }

            public void OnCanceled(CancellationToken cancellationToken)
            {
                DisposeAsync().Forget();
            }

            public void OnCompleted()
            {
                completionSource.TrySetResult(false);
            }

            public void OnError(Exception ex)
            {
                completionSource.TrySetException(ex);
            }

            static void CancellationCallback(object state)
            {
                var self = (Enumerator)state;
                self.DisposeAsync().Forget();
            }
        }
    }

    public static class StateExtensions
    {
        public static ReadOnlyAsyncReactiveProperty<T> ToReadOnlyAsyncReactiveProperty<T>(this IUniTaskAsyncEnumerable<T> source, CancellationToken cancellationToken)
        {
            return new ReadOnlyAsyncReactiveProperty<T>(source, cancellationToken);
        }

        public static ReadOnlyAsyncReactiveProperty<T> ToReadOnlyAsyncReactiveProperty<T>(this IUniTaskAsyncEnumerable<T> source, T initialValue, CancellationToken cancellationToken)
        {
            return new ReadOnlyAsyncReactiveProperty<T>(initialValue, source, cancellationToken);
        }
    }
}

================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncReactiveProperty.cs.meta
================================================
fileFormatVersion: 2
guid: 8ef320b87f537ee4fb2282e765dc6166
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncUnit.cs
================================================
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or 

using System;

namespace Cysharp.Threading.Tasks
{
    public readonly struct AsyncUnit : IEquatable<AsyncUnit>
    {
        public static readonly AsyncUnit Default = new AsyncUnit();

        public override int GetHashCode()
        {
            return 0;
        }

        public bool Equals(AsyncUnit other)
        {
            return true;
        }

        public override string ToString()
        {
            return "()";
        }
    }
}


================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncUnit.cs.meta
================================================
fileFormatVersion: 2
guid: 4f95ac245430d304bb5128d13b6becc8
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenEqualityComparer.cs
================================================
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member

using System.Collections.Generic;
using System.Threading;

namespace Cysharp.Threading.Tasks
{
    public class CancellationTokenEqualityComparer : IEqualityComparer<CancellationToken>
    {
        public static readonly IEqualityComparer<CancellationToken> Default = new CancellationTokenEqualityComparer();

        public bool Equals(CancellationToken x, CancellationToken y)
        {
            return x.Equals(y);
        }

        public int GetHashCode(CancellationToken obj)
        {
            return obj.GetHashCode();
        }
    }
}



================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenEqualityComparer.cs.meta
================================================
fileFormatVersion: 2
guid: 7d739f510b125b74fa7290ac4335e46e
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenExtensions.cs
================================================
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member

using System;
using System.Runtime.CompilerServices;
using System.Threading;

namespace Cysharp.Threading.Tasks
{
    public static class CancellationTokenExtensions
    {
        static readonly Action<object> cancellationTokenCallback = Callback;
        static readonly Action<object> disposeCallback = DisposeCallback;

        public static CancellationToken ToCancellationToken(this UniTask task)
        {
            var cts = new CancellationTokenSource();
            ToCancellationTokenCore(task, cts).Forget();
            return cts.Token;
        }

        public static CancellationToken ToCancellationToken(this UniTask task, CancellationToken linkToken)
        {
            if (linkToken.IsCancellationRequested)
            {
                return linkToken;
            }

            if (!linkToken.CanBeCanceled)
            {
                return ToCancellationToken(task);
            }

            var cts = CancellationTokenSource.CreateLinkedTokenSource(linkToken);
            ToCancellationTokenCore(task, cts).Forget();

            return cts.Token;
        }

        public static CancellationToken ToCancellationToken<T>(this UniTask<T> task)
        {
            return ToCancellationToken(task.AsUniTask());
        }

        public static CancellationToken ToCancellationToken<T>(this UniTask<T> task, CancellationToken linkToken)
        {
            return ToCancellationToken(task.AsUniTask(), linkToken);
        }

        static async UniTaskVoid ToCancellationTokenCore(UniTask task, CancellationTokenSource cts)
        {
            try
            {
                await task;
            }
            catch (Exception ex)
            {
                UniTaskScheduler.PublishUnobservedTaskException(ex);
            }
            cts.Cancel();
            cts.Dispose();
        }

        public static (UniTask, CancellationTokenRegistration) ToUniTask(this CancellationToken cancellationToken)
        {
            if (cancellationToken.IsCancellationRequested)
            {
                return (UniTask.FromCanceled(cancellationToken), default(CancellationTokenRegistration));
            }

            var promise = new UniTaskCompletionSource();
            return (promise.Task, cancellationToken.RegisterWithoutCaptureExecutionContext(cancellationTokenCallback, promise));
        }

        static void Callback(object state)
        {
            var promise = (UniTaskCompletionSource)state;
            promise.TrySetResult();
        }

        public static CancellationTokenAwaitable WaitUntilCanceled(this CancellationToken cancellationToken)
        {
            return new CancellationTokenAwaitable(cancellationToken);
        }

        public static CancellationTokenRegistration RegisterWithoutCaptureExecutionContext(this CancellationToken cancellationToken, Action callback)
        {
            var restoreFlow = false;
            if (!ExecutionContext.IsFlowSuppressed())
            {
                ExecutionContext.SuppressFlow();
                restoreFlow = true;
            }

            try
            {
                return cancellationToken.Register(callback, false);
            }
            finally
            {
                if (restoreFlow)
                {
                    ExecutionContext.RestoreFlow();
                }
            }
        }

        public static CancellationTokenRegistration RegisterWithoutCaptureExecutionContext(this CancellationToken cancellationToken, Action<object> callback, object state)
        {
            var restoreFlow = false;
            if (!ExecutionContext.IsFlowSuppressed())
            {
                ExecutionContext.SuppressFlow();
                restoreFlow = true;
            }

            try
            {
                return cancellationToken.Register(callback, state, false);
            }
            finally
            {
                if (restoreFlow)
                {
                    ExecutionContext.RestoreFlow();
                }
            }
        }

        public static CancellationTokenRegistration AddTo(this IDisposable disposable, CancellationToken cancellationToken)
        {
            return cancellationToken.RegisterWithoutCaptureExecutionContext(disposeCallback, disposable);
        }

        static void DisposeCallback(object state)
        {
            var d = (IDisposable)state;
            d.Dispose();
        }
    }

    public struct CancellationTokenAwaitable
    {
        CancellationToken cancellationToken;

        public CancellationTokenAwaitable(CancellationToken cancellationToken)
        {
            this.cancellationToken = cancellationToken;
        }

        public Awaiter GetAwaiter()
        {
            return new Awaiter(cancellationToken);
        }

        public struct Awaiter : ICriticalNotifyCompletion
        {
            CancellationToken cancellationToken;

            public Awaiter(CancellationToken cancellationToken)
            {
                this.cancellationToken = cancellationToken;
            }

            public bool IsCompleted => !cancellationToken.CanBeCanceled || cancellationToken.IsCancellationRequested;

            public void GetResult()
            {
            }

            public void OnCompleted(Action continuation)
            {
                UnsafeOnCompleted(continuation);
            }

            public void UnsafeOnCompleted(Action continuation)
            {
                cancellationToken.RegisterWithoutCaptureExecutionContext(continuation);
            }
        }
    }
}



================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenExtensions.cs.meta
================================================
fileFormatVersion: 2
guid: 4be7209f04146bd45ac5ee775a5f7c26
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenSourceExtensions.cs
================================================
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member

using System.Threading;
using UnityEngine;
using Cysharp.Threading.Tasks.Triggers;
using System;
using Cysharp.Threading.Tasks.Internal;

namespace Cysharp.Threading.Tasks
{

    public static partial class CancellationTokenSourceExtensions
    {
        readonly static Action<object> CancelCancellationTokenSourceStateDelegate = new Action<object>(CancelCancellationTokenSourceState);

        static void CancelCancellationTokenSourceState(object state)
        {
            var cts = (CancellationTokenSource)state;
            cts.Cancel();
        }

        public static IDisposable CancelAfterSlim(this CancellationTokenSource cts, int millisecondsDelay, DelayType delayType = DelayType.DeltaTime, PlayerLoopTiming delayTiming = PlayerLoopTiming.Update)
        {
            return CancelAfterSlim(cts, TimeSpan.FromMilliseconds(millisecondsDelay), delayType, delayTiming);
        }

        public static IDisposable CancelAfterSlim(this CancellationTokenSource cts, TimeSpan delayTimeSpan, DelayType delayType = DelayType.DeltaTime, PlayerLoopTiming delayTiming = PlayerLoopTiming.Update)
        {
            return PlayerLoopTimer.StartNew(delayTimeSpan, false, delayType, delayTiming, cts.Token, CancelCancellationTokenSourceStateDelegate, cts);
        }

        public static void RegisterRaiseCancelOnDestroy(this CancellationTokenSource cts, Component component)
        {
            RegisterRaiseCancelOnDestroy(cts, component.gameObject);
        }

        public static void RegisterRaiseCancelOnDestroy(this CancellationTokenSource cts, GameObject gameObject)
        {
            var trigger = gameObject.GetAsyncDestroyTrigger();
            trigger.CancellationToken.RegisterWithoutCaptureExecutionContext(CancelCancellationTokenSourceStateDelegate, cts);
        }
    }
}



================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenSourceExtensions.cs.meta
================================================
fileFormatVersion: 2
guid: 22d85d07f1e70ab42a7a4c25bd65e661
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Channel.cs
================================================
using System;
using System.Collections.Generic;
using System.Threading;

namespace Cysharp.Threading.Tasks
{
    public static class Channel
    {
        public static Channel<T> CreateSingleConsumerUnbounded<T>()
        {
            return new SingleConsumerUnboundedChannel<T>();
        }
    }

    public abstract class Channel<TWrite, TRead>
    {
        public ChannelReader<TRead> Reader { get; protected set; }
        public ChannelWriter<TWrite> Writer { get; protected set; }

        public static implicit operator ChannelReader<TRead>(Channel<TWrite, TRead> channel) => channel.Reader;
        public static implicit operator ChannelWriter<TWrite>(Channel<TWrite, TRead> channel) => channel.Writer;
    }

    public abstract class Channel<T> : Channel<T, T>
    {
    }

    public abstract class ChannelReader<T>
    {
        public abstract bool TryRead(out T item);
        public abstract UniTask<bool> WaitToReadAsync(CancellationToken cancellationToken = default(CancellationToken));

        public abstract UniTask Completion { get; }

        public virtual UniTask<T> ReadAsync(CancellationToken cancellationToken = default(CancellationToken))
        {
            if (this.TryRead(out var item))
            {
                return UniTask.FromResult(item);
            }

            return ReadAsyncCore(cancellationToken);
        }

        async UniTask<T> ReadAsyncCore(CancellationToken cancellationToken = default(CancellationToken))
        {
            if (await WaitToReadAsync(cancellationToken))
            {
                if (TryRead(out var item))
                {
                    return item;
                }
            }

            throw new ChannelClosedException();
        }

        public abstract IUniTaskAsyncEnumerable<T> ReadAllAsync(CancellationToken cancellationToken = default(CancellationToken));
    }

    public abstract class ChannelWriter<T>
    {
        public abstract bool TryWrite(T item);
        public abstract bool TryComplete(Exception error = null);

        public void Complete(Exception error = null)
        {
            if (!TryComplete(error))
            {
                throw new ChannelClosedException();
            }
        }
    }

    public partial class ChannelClosedException : InvalidOperationException
    {
        public ChannelClosedException() :
            base("Channel is already closed.")
        { }

        public ChannelClosedException(string message) : base(message) { }

        public ChannelClosedException(Exception innerException) :
            base("Channel is already closed", innerException)
        { }

        public ChannelClosedException(string message, Exception innerException) : base(message, innerException) { }
    }

    internal class SingleConsumerUnboundedChannel<T> : Channel<T>
    {
        readonly Queue<T> items;
        readonly SingleConsumerUnboundedChannelReader readerSource;
        UniTaskCompletionSource completedTaskSource;
        UniTask completedTask;

        Exception completionError;
        bool closed;

        public SingleConsumerUnboundedChannel()
        {
            items = new Queue<T>();
            Writer = new SingleConsumerUnboundedChannelWriter(this);
            readerSource = new SingleConsumerUnboundedChannelReader(this);
            Reader = readerSource;
        }

        sealed class SingleConsumerUnboundedChannelWriter : ChannelWriter<T>
        {
            readonly SingleConsumerUnboundedChannel<T> parent;

            public SingleConsumerUnboundedChannelWriter(SingleConsumerUnboundedChannel<T> parent)
            {
                this.parent = parent;
            }

            public override bool TryWrite(T item)
            {
                bool waiting;
                lock (parent.items)
                {
                    if (parent.closed) return false;

                    parent.items.Enqueue(item);
                    waiting = parent.readerSource.isWaiting;
                }

                if (waiting)
                {
                    parent.readerSource.SingalContinuation();
                }

                return true;
            }

            public override bool TryComplete(Exception error = null)
            {
                bool waiting;
                lock (parent.items)
                {
                    if (parent.closed) return false;
                    parent.closed = true;
                    waiting = parent.readerSource.isWaiting;

                    if (parent.items.Count == 0)
                    {
                        if (error == null)
                        {
                            if (parent.completedTaskSource != null)
                            {
                                parent.completedTaskSource.TrySetResult();
                            }
                            else
                            {
                                parent.completedTask = UniTask.CompletedTask;
                            }
                        }
                        else
                        {
                            if (parent.completedTaskSource != null)
                            {
                                parent.completedTaskSource.TrySetException(error);
                            }
                            else
                            {
                                parent.completedTask = UniTask.FromException(error);
                            }
                        }

                        if (waiting)
                        {
                            parent.readerSource.SingalCompleted(error);
                        }
                    }

                    parent.completionError = error;
                }

                return true;
            }
        }

        sealed class SingleConsumerUnboundedChannelReader : ChannelReader<T>, IUniTaskSource<bool>
        {
            readonly Action<object> CancellationCallbackDelegate = CancellationCallback;
            readonly SingleConsumerUnboundedChannel<T> parent;

            CancellationToken cancellationToken;
            CancellationTokenRegistration cancellationTokenRegistration;
            UniTaskCompletionSourceCore<bool> core;
            internal bool isWaiting;

            public SingleConsumerUnboundedChannelReader(SingleConsumerUnboundedChannel<T> parent)
            {
                this.parent = parent;

                TaskTracker.TrackActiveTask(this, 4);
            }

            public override UniTask Completion
            {
                get
                {
                    if (parent.completedTaskSource != null) return parent.completedTaskSource.Task;

                    if (parent.closed)
                    {
                        return parent.completedTask;
                    }

                    parent.completedTaskSource = new UniTaskCompletionSource();
                    return parent.completedTaskSource.Task;
                }
            }

            public override bool TryRead(out T item)
            {
                lock (parent.items)
                {
                    if (parent.items.Count != 0)
                    {
                        item = parent.items.Dequeue();

                        // complete when all value was consumed.
                        if (parent.closed && parent.items.Count == 0)
                        {
                            if (parent.completionError != null)
                            {
                                if (parent.completedTaskSource != null)
                                {
                                    parent.completedTaskSource.TrySetException(parent.completionError);
                                }
                                else
                                {
                                    parent.completedTask = UniTask.FromException(parent.completionError);
                                }
                            }
                            else
                            {
                                if (parent.completedTaskSource != null)
                                {
                                    parent.completedTaskSource.TrySetResult();
                                }
                                else
                                {
                                    parent.completedTask = UniTask.CompletedTask;
                                }
                            }
                        }
                    }
                    else
                    {
                        item = default;
                        return false;
                    }
                }

                return true;
            }

            public override UniTask<bool> WaitToReadAsync(CancellationToken cancellationToken)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return UniTask.FromCanceled<bool>(cancellationToken);
                }

                lock (parent.items)
                {
                    if (parent.items.Count != 0)
                    {
                        return CompletedTasks.True;
                    }

                    if (parent.closed)
                    {
                        if (parent.completionError == null)
                        {
                            return CompletedTasks.False;
                        }
                        else
                        {
                            return UniTask.FromException<bool>(parent.completionError);
                        }
                    }

                    cancellationTokenRegistration.Dispose();

                    core.Reset();
                    isWaiting = true;

                    this.cancellationToken = cancellationToken;
                    if (this.cancellationToken.CanBeCanceled)
                    {
                        cancellationTokenRegistration = this.cancellationToken.RegisterWithoutCaptureExecutionContext(CancellationCallbackDelegate, this);
                    }

                    return new UniTask<bool>(this, core.Version);
                }
            }

            public void SingalContinuation()
            {
                core.TrySetResult(true);
            }

            public void SingalCancellation(CancellationToken cancellationToken)
            {
                TaskTracker.RemoveTracking(this);
                core.TrySetCanceled(cancellationToken);
            }

            public void SingalCompleted(Exception error)
            {
                if (error != null)
                {
                    TaskTracker.RemoveTracking(this);
                    core.TrySetException(error);
                }
                else
                {
                    TaskTracker.RemoveTracking(this);
                    core.TrySetResult(false);
                }
            }

            public override IUniTaskAsyncEnumerable<T> ReadAllAsync(CancellationToken cancellationToken = default)
            {
                return new ReadAllAsyncEnumerable(this, cancellationToken);
            }

            bool IUniTaskSource<bool>.GetResult(short token)
            {
                return core.GetResult(token);
            }

            void IUniTaskSource.GetResult(short token)
            {
                core.GetResult(token);
            }

            UniTaskStatus IUniTaskSource.GetStatus(short token)
            {
                return core.GetStatus(token);
            }

            void IUniTaskSource.OnCompleted(Action<object> continuation, object state, short token)
            {
                core.OnCompleted(continuation, state, token);
            }

            UniTaskStatus IUniTaskSource.UnsafeGetStatus()
            {
                return core.UnsafeGetStatus();
            }

            static void CancellationCallback(object state)
            {
                var self = (SingleConsumerUnboundedChannelReader)state;
                self.SingalCancellation(self.cancellationToken);
            }

            sealed class ReadAllAsyncEnumerable : IUniTaskAsyncEnumerable<T>, IUniTaskAsyncEnumerator<T>
            {
                readonly Action<object> CancellationCallback1Delegate = CancellationCallback1;
                readonly Action<object> CancellationCallback2Delegate = CancellationCallback2;

                readonly SingleConsumerUnboundedChannelReader parent;
                CancellationToken cancellationToken1;
                CancellationToken cancellationToken2;
                CancellationTokenRegistration cancellationTokenRegistration1;
                CancellationTokenRegistration cancellationTokenRegistration2;

                T current;
                bool cacheValue;
                bool running;

                public ReadAllAsyncEnumerable(SingleConsumerUnboundedChannelReader parent, CancellationToken cancellationToken)
                {
                    this.parent = parent;
                    this.cancellationToken1 = cancellationToken;
                }

                public IUniTaskAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken cancellationToken = default)
                {
                    if (running)
                    {
                        throw new InvalidOperationException("Enumerator is already running, does not allow call GetAsyncEnumerator twice.");
                    }

                    if (this.cancellationToken1 != cancellationToken)
                    {
                        this.cancellationToken2 = cancellationToken;
                    }

                    if (this.cancellationToken1.CanBeCanceled)
                    {
                        this.cancellationTokenRegistration1 =  this.cancellationToken1.RegisterWithoutCaptureExecutionContext(CancellationCallback1Delegate, this);
                    }

                    if (this.cancellationToken2.CanBeCanceled)
                    {
                        this.cancellationTokenRegistration2 = this.cancellationToken2.RegisterWithoutCaptureExecutionContext(CancellationCallback2Delegate, this);
                    }

                    running = true;
                    return this;
                }

                public T Current
                {
                    get
                    {
                        if (cacheValue)
                        {
                            return current;
                        }
                        parent.TryRead(out current);
                        return current;
                    }
                }

                public UniTask<bool> MoveNextAsync()
                {
                    cacheValue = false;
                    return parent.WaitToReadAsync(CancellationToken.None); // ok to use None, registered in ctor.
                }

                public UniTask DisposeAsync()
                {
                    cancellationTokenRegistration1.Dispose();
                    cancellationTokenRegistration2.Dispose();
                    return default;
                }

                static void CancellationCallback1(object state)
                {
                    var self = (ReadAllAsyncEnumerable)state;
                    self.parent.SingalCancellation(self.cancellationToken1);
           
Download .txt
gitextract_puolhiam/

├── .config/
│   └── dotnet-tools.json
├── .editorconfig
├── .github/
│   ├── FUNDING.yml
│   ├── dependabot.yaml
│   └── workflows/
│       ├── build-debug.yaml
│       ├── build-docs.yaml
│       ├── build-release.yaml
│       ├── prevent-github-change.yaml
│       ├── stale.yaml
│       └── toc.yaml
├── .gitignore
├── Directory.Build.props
├── LICENSE
├── README.md
├── README_CN.md
├── UniTask.NetCore.sln
├── docs/
│   ├── .gitignore
│   ├── api/
│   │   └── .gitignore
│   ├── docfx.json
│   ├── index.md
│   └── toc.yml
├── opensource.snk
└── src/
    ├── UniTask/
    │   ├── Assets/
    │   │   ├── Editor/
    │   │   │   ├── EditorRunnerChecker.cs
    │   │   │   ├── EditorRunnerChecker.cs.meta
    │   │   │   ├── PackageExporter.cs
    │   │   │   └── PackageExporter.cs.meta
    │   │   ├── Editor.meta
    │   │   ├── Plugins/
    │   │   │   ├── UniTask/
    │   │   │   │   ├── Editor/
    │   │   │   │   │   ├── SplitterGUILayout.cs
    │   │   │   │   │   ├── SplitterGUILayout.cs.meta
    │   │   │   │   │   ├── UniTask.Editor.asmdef
    │   │   │   │   │   ├── UniTask.Editor.asmdef.meta
    │   │   │   │   │   ├── UniTaskTrackerTreeView.cs
    │   │   │   │   │   ├── UniTaskTrackerTreeView.cs.meta
    │   │   │   │   │   ├── UniTaskTrackerWindow.cs
    │   │   │   │   │   └── UniTaskTrackerWindow.cs.meta
    │   │   │   │   ├── Editor.meta
    │   │   │   │   ├── Runtime/
    │   │   │   │   │   ├── AsyncLazy.cs
    │   │   │   │   │   ├── AsyncLazy.cs.meta
    │   │   │   │   │   ├── AsyncReactiveProperty.cs
    │   │   │   │   │   ├── AsyncReactiveProperty.cs.meta
    │   │   │   │   │   ├── AsyncUnit.cs
    │   │   │   │   │   ├── AsyncUnit.cs.meta
    │   │   │   │   │   ├── CancellationTokenEqualityComparer.cs
    │   │   │   │   │   ├── CancellationTokenEqualityComparer.cs.meta
    │   │   │   │   │   ├── CancellationTokenExtensions.cs
    │   │   │   │   │   ├── CancellationTokenExtensions.cs.meta
    │   │   │   │   │   ├── CancellationTokenSourceExtensions.cs
    │   │   │   │   │   ├── CancellationTokenSourceExtensions.cs.meta
    │   │   │   │   │   ├── Channel.cs
    │   │   │   │   │   ├── Channel.cs.meta
    │   │   │   │   │   ├── CompilerServices/
    │   │   │   │   │   │   ├── AsyncMethodBuilderAttribute.cs
    │   │   │   │   │   │   ├── AsyncMethodBuilderAttribute.cs.meta
    │   │   │   │   │   │   ├── AsyncUniTaskMethodBuilder.cs
    │   │   │   │   │   │   ├── AsyncUniTaskMethodBuilder.cs.meta
    │   │   │   │   │   │   ├── AsyncUniTaskVoidMethodBuilder.cs
    │   │   │   │   │   │   ├── AsyncUniTaskVoidMethodBuilder.cs.meta
    │   │   │   │   │   │   ├── StateMachineRunner.cs
    │   │   │   │   │   │   └── StateMachineRunner.cs.meta
    │   │   │   │   │   ├── CompilerServices.meta
    │   │   │   │   │   ├── EnumerableAsyncExtensions.cs
    │   │   │   │   │   ├── EnumerableAsyncExtensions.cs.meta
    │   │   │   │   │   ├── EnumeratorAsyncExtensions.cs
    │   │   │   │   │   ├── EnumeratorAsyncExtensions.cs.meta
    │   │   │   │   │   ├── ExceptionExtensions.cs
    │   │   │   │   │   ├── ExceptionExtensions.cs.meta
    │   │   │   │   │   ├── External/
    │   │   │   │   │   │   ├── Addressables/
    │   │   │   │   │   │   │   ├── AddressablesAsyncExtensions.cs
    │   │   │   │   │   │   │   ├── AddressablesAsyncExtensions.cs.meta
    │   │   │   │   │   │   │   ├── UniTask.Addressables.asmdef
    │   │   │   │   │   │   │   └── UniTask.Addressables.asmdef.meta
    │   │   │   │   │   │   ├── Addressables.meta
    │   │   │   │   │   │   ├── DOTween/
    │   │   │   │   │   │   │   ├── DOTweenAsyncExtensions.cs
    │   │   │   │   │   │   │   ├── DOTweenAsyncExtensions.cs.meta
    │   │   │   │   │   │   │   ├── UniTask.DOTween.asmdef
    │   │   │   │   │   │   │   └── UniTask.DOTween.asmdef.meta
    │   │   │   │   │   │   ├── DOTween.meta
    │   │   │   │   │   │   ├── TextMeshPro/
    │   │   │   │   │   │   │   ├── TextMeshProAsyncExtensions.InputField.cs
    │   │   │   │   │   │   │   ├── TextMeshProAsyncExtensions.InputField.cs.meta
    │   │   │   │   │   │   │   ├── TextMeshProAsyncExtensions.InputField.tt
    │   │   │   │   │   │   │   ├── TextMeshProAsyncExtensions.InputField.tt.meta
    │   │   │   │   │   │   │   ├── TextMeshProAsyncExtensions.cs
    │   │   │   │   │   │   │   ├── TextMeshProAsyncExtensions.cs.meta
    │   │   │   │   │   │   │   ├── UniTask.TextMeshPro.asmdef
    │   │   │   │   │   │   │   └── UniTask.TextMeshPro.asmdef.meta
    │   │   │   │   │   │   └── TextMeshPro.meta
    │   │   │   │   │   ├── External.meta
    │   │   │   │   │   ├── IUniTaskAsyncEnumerable.cs
    │   │   │   │   │   ├── IUniTaskAsyncEnumerable.cs.meta
    │   │   │   │   │   ├── IUniTaskSource.cs
    │   │   │   │   │   ├── IUniTaskSource.cs.meta
    │   │   │   │   │   ├── Internal/
    │   │   │   │   │   │   ├── ArrayPool.cs
    │   │   │   │   │   │   ├── ArrayPool.cs.meta
    │   │   │   │   │   │   ├── ArrayPoolUtil.cs
    │   │   │   │   │   │   ├── ArrayPoolUtil.cs.meta
    │   │   │   │   │   │   ├── ArrayUtil.cs
    │   │   │   │   │   │   ├── ArrayUtil.cs.meta
    │   │   │   │   │   │   ├── ContinuationQueue.cs
    │   │   │   │   │   │   ├── ContinuationQueue.cs.meta
    │   │   │   │   │   │   ├── DiagnosticsExtensions.cs
    │   │   │   │   │   │   ├── DiagnosticsExtensions.cs.meta
    │   │   │   │   │   │   ├── Error.cs
    │   │   │   │   │   │   ├── Error.cs.meta
    │   │   │   │   │   │   ├── MinimumQueue.cs
    │   │   │   │   │   │   ├── MinimumQueue.cs.meta
    │   │   │   │   │   │   ├── PlayerLoopRunner.cs
    │   │   │   │   │   │   ├── PlayerLoopRunner.cs.meta
    │   │   │   │   │   │   ├── PooledDelegate.cs
    │   │   │   │   │   │   ├── PooledDelegate.cs.meta
    │   │   │   │   │   │   ├── RuntimeHelpersAbstraction.cs
    │   │   │   │   │   │   ├── RuntimeHelpersAbstraction.cs.meta
    │   │   │   │   │   │   ├── StatePool.cs
    │   │   │   │   │   │   ├── StatePool.cs.meta
    │   │   │   │   │   │   ├── TaskTracker.cs
    │   │   │   │   │   │   ├── TaskTracker.cs.meta
    │   │   │   │   │   │   ├── UnityEqualityComparer.cs
    │   │   │   │   │   │   ├── UnityEqualityComparer.cs.meta
    │   │   │   │   │   │   ├── UnityWebRequestExtensions.cs
    │   │   │   │   │   │   ├── UnityWebRequestExtensions.cs.meta
    │   │   │   │   │   │   ├── ValueStopwatch.cs
    │   │   │   │   │   │   ├── ValueStopwatch.cs.meta
    │   │   │   │   │   │   ├── WeakDictionary.cs
    │   │   │   │   │   │   └── WeakDictionary.cs.meta
    │   │   │   │   │   ├── Internal.meta
    │   │   │   │   │   ├── Linq/
    │   │   │   │   │   │   ├── Aggregate.cs
    │   │   │   │   │   │   ├── Aggregate.cs.meta
    │   │   │   │   │   │   ├── All.cs
    │   │   │   │   │   │   ├── All.cs.meta
    │   │   │   │   │   │   ├── Any.cs
    │   │   │   │   │   │   ├── Any.cs.meta
    │   │   │   │   │   │   ├── AppendPrepend.cs
    │   │   │   │   │   │   ├── AppendPrepend.cs.meta
    │   │   │   │   │   │   ├── AsUniTaskAsyncEnumerable.cs
    │   │   │   │   │   │   ├── AsUniTaskAsyncEnumerable.cs.meta
    │   │   │   │   │   │   ├── AsyncEnumeratorBase.cs
    │   │   │   │   │   │   ├── AsyncEnumeratorBase.cs.meta
    │   │   │   │   │   │   ├── Average.cs
    │   │   │   │   │   │   ├── Average.cs.meta
    │   │   │   │   │   │   ├── Average.tt
    │   │   │   │   │   │   ├── Average.tt.meta
    │   │   │   │   │   │   ├── Buffer.cs
    │   │   │   │   │   │   ├── Buffer.cs.meta
    │   │   │   │   │   │   ├── Cast.cs
    │   │   │   │   │   │   ├── Cast.cs.meta
    │   │   │   │   │   │   ├── CombineLatest.cs
    │   │   │   │   │   │   ├── CombineLatest.cs.meta
    │   │   │   │   │   │   ├── CombineLatest.tt
    │   │   │   │   │   │   ├── CombineLatest.tt.meta
    │   │   │   │   │   │   ├── Concat.cs
    │   │   │   │   │   │   ├── Concat.cs.meta
    │   │   │   │   │   │   ├── Contains.cs
    │   │   │   │   │   │   ├── Contains.cs.meta
    │   │   │   │   │   │   ├── Count.cs
    │   │   │   │   │   │   ├── Count.cs.meta
    │   │   │   │   │   │   ├── Create.cs
    │   │   │   │   │   │   ├── Create.cs.meta
    │   │   │   │   │   │   ├── DefaultIfEmpty.cs
    │   │   │   │   │   │   ├── DefaultIfEmpty.cs.meta
    │   │   │   │   │   │   ├── Distinct.cs
    │   │   │   │   │   │   ├── Distinct.cs.meta
    │   │   │   │   │   │   ├── DistinctUntilChanged.cs
    │   │   │   │   │   │   ├── DistinctUntilChanged.cs.meta
    │   │   │   │   │   │   ├── Do.cs
    │   │   │   │   │   │   ├── Do.cs.meta
    │   │   │   │   │   │   ├── ElementAt.cs
    │   │   │   │   │   │   ├── ElementAt.cs.meta
    │   │   │   │   │   │   ├── Empty.cs
    │   │   │   │   │   │   ├── Empty.cs.meta
    │   │   │   │   │   │   ├── Except.cs
    │   │   │   │   │   │   ├── Except.cs.meta
    │   │   │   │   │   │   ├── First.cs
    │   │   │   │   │   │   ├── First.cs.meta
    │   │   │   │   │   │   ├── ForEach.cs
    │   │   │   │   │   │   ├── ForEach.cs.meta
    │   │   │   │   │   │   ├── GroupBy.cs
    │   │   │   │   │   │   ├── GroupBy.cs.meta
    │   │   │   │   │   │   ├── GroupJoin.cs
    │   │   │   │   │   │   ├── GroupJoin.cs.meta
    │   │   │   │   │   │   ├── Intersect.cs
    │   │   │   │   │   │   ├── Intersect.cs.meta
    │   │   │   │   │   │   ├── Join.cs
    │   │   │   │   │   │   ├── Join.cs.meta
    │   │   │   │   │   │   ├── Last.cs
    │   │   │   │   │   │   ├── Last.cs.meta
    │   │   │   │   │   │   ├── LongCount.cs
    │   │   │   │   │   │   ├── LongCount.cs.meta
    │   │   │   │   │   │   ├── Max.cs
    │   │   │   │   │   │   ├── Max.cs.meta
    │   │   │   │   │   │   ├── Merge.cs
    │   │   │   │   │   │   ├── Merge.cs.meta
    │   │   │   │   │   │   ├── Min.cs
    │   │   │   │   │   │   ├── Min.cs.meta
    │   │   │   │   │   │   ├── MinMax.cs
    │   │   │   │   │   │   ├── MinMax.cs.meta
    │   │   │   │   │   │   ├── MinMax.tt
    │   │   │   │   │   │   ├── MinMax.tt.meta
    │   │   │   │   │   │   ├── Never.cs
    │   │   │   │   │   │   ├── Never.cs.meta
    │   │   │   │   │   │   ├── OfType.cs
    │   │   │   │   │   │   ├── OfType.cs.meta
    │   │   │   │   │   │   ├── OrderBy.cs
    │   │   │   │   │   │   ├── OrderBy.cs.meta
    │   │   │   │   │   │   ├── Pairwise.cs
    │   │   │   │   │   │   ├── Pairwise.cs.meta
    │   │   │   │   │   │   ├── Publish.cs
    │   │   │   │   │   │   ├── Publish.cs.meta
    │   │   │   │   │   │   ├── Queue.cs
    │   │   │   │   │   │   ├── Queue.cs.meta
    │   │   │   │   │   │   ├── Range.cs
    │   │   │   │   │   │   ├── Range.cs.meta
    │   │   │   │   │   │   ├── Repeat.cs
    │   │   │   │   │   │   ├── Repeat.cs.meta
    │   │   │   │   │   │   ├── Return.cs
    │   │   │   │   │   │   ├── Return.cs.meta
    │   │   │   │   │   │   ├── Reverse.cs
    │   │   │   │   │   │   ├── Reverse.cs.meta
    │   │   │   │   │   │   ├── Select.cs
    │   │   │   │   │   │   ├── Select.cs.meta
    │   │   │   │   │   │   ├── SelectMany.cs
    │   │   │   │   │   │   ├── SelectMany.cs.meta
    │   │   │   │   │   │   ├── SequenceEqual.cs
    │   │   │   │   │   │   ├── SequenceEqual.cs.meta
    │   │   │   │   │   │   ├── Single.cs
    │   │   │   │   │   │   ├── Single.cs.meta
    │   │   │   │   │   │   ├── Skip.cs
    │   │   │   │   │   │   ├── Skip.cs.meta
    │   │   │   │   │   │   ├── SkipLast.cs
    │   │   │   │   │   │   ├── SkipLast.cs.meta
    │   │   │   │   │   │   ├── SkipUntil.cs
    │   │   │   │   │   │   ├── SkipUntil.cs.meta
    │   │   │   │   │   │   ├── SkipUntilCanceled.cs
    │   │   │   │   │   │   ├── SkipUntilCanceled.cs.meta
    │   │   │   │   │   │   ├── SkipWhile.cs
    │   │   │   │   │   │   ├── SkipWhile.cs.meta
    │   │   │   │   │   │   ├── Subscribe.cs
    │   │   │   │   │   │   ├── Subscribe.cs.meta
    │   │   │   │   │   │   ├── Sum.cs
    │   │   │   │   │   │   ├── Sum.cs.meta
    │   │   │   │   │   │   ├── Sum.tt
    │   │   │   │   │   │   ├── Sum.tt.meta
    │   │   │   │   │   │   ├── Take.cs
    │   │   │   │   │   │   ├── Take.cs.meta
    │   │   │   │   │   │   ├── TakeLast.cs
    │   │   │   │   │   │   ├── TakeLast.cs.meta
    │   │   │   │   │   │   ├── TakeUntil.cs
    │   │   │   │   │   │   ├── TakeUntil.cs.meta
    │   │   │   │   │   │   ├── TakeUntilCanceled.cs
    │   │   │   │   │   │   ├── TakeUntilCanceled.cs.meta
    │   │   │   │   │   │   ├── TakeWhile.cs
    │   │   │   │   │   │   ├── TakeWhile.cs.meta
    │   │   │   │   │   │   ├── Throw.cs
    │   │   │   │   │   │   ├── Throw.cs.meta
    │   │   │   │   │   │   ├── ToArray.cs
    │   │   │   │   │   │   ├── ToArray.cs.meta
    │   │   │   │   │   │   ├── ToDictionary.cs
    │   │   │   │   │   │   ├── ToDictionary.cs.meta
    │   │   │   │   │   │   ├── ToHashSet.cs
    │   │   │   │   │   │   ├── ToHashSet.cs.meta
    │   │   │   │   │   │   ├── ToList.cs
    │   │   │   │   │   │   ├── ToList.cs.meta
    │   │   │   │   │   │   ├── ToLookup.cs
    │   │   │   │   │   │   ├── ToLookup.cs.meta
    │   │   │   │   │   │   ├── ToObservable.cs
    │   │   │   │   │   │   ├── ToObservable.cs.meta
    │   │   │   │   │   │   ├── ToUniTaskAsyncEnumerable.cs
    │   │   │   │   │   │   ├── ToUniTaskAsyncEnumerable.cs.meta
    │   │   │   │   │   │   ├── UniTask.Linq.asmdef
    │   │   │   │   │   │   ├── UniTask.Linq.asmdef.meta
    │   │   │   │   │   │   ├── Union.cs
    │   │   │   │   │   │   ├── Union.cs.meta
    │   │   │   │   │   │   ├── UnityExtensions/
    │   │   │   │   │   │   │   ├── EveryUpdate.cs
    │   │   │   │   │   │   │   ├── EveryUpdate.cs.meta
    │   │   │   │   │   │   │   ├── EveryValueChanged.cs
    │   │   │   │   │   │   │   ├── EveryValueChanged.cs.meta
    │   │   │   │   │   │   │   ├── Timer.cs
    │   │   │   │   │   │   │   └── Timer.cs.meta
    │   │   │   │   │   │   ├── UnityExtensions.meta
    │   │   │   │   │   │   ├── Where.cs
    │   │   │   │   │   │   ├── Where.cs.meta
    │   │   │   │   │   │   ├── Zip.cs
    │   │   │   │   │   │   └── Zip.cs.meta
    │   │   │   │   │   ├── Linq.meta
    │   │   │   │   │   ├── MoveNextSource.cs
    │   │   │   │   │   ├── MoveNextSource.cs.meta
    │   │   │   │   │   ├── PlayerLoopHelper.cs
    │   │   │   │   │   ├── PlayerLoopHelper.cs.meta
    │   │   │   │   │   ├── PlayerLoopTimer.cs
    │   │   │   │   │   ├── PlayerLoopTimer.cs.meta
    │   │   │   │   │   ├── Progress.cs
    │   │   │   │   │   ├── Progress.cs.meta
    │   │   │   │   │   ├── TaskPool.cs
    │   │   │   │   │   ├── TaskPool.cs.meta
    │   │   │   │   │   ├── TimeoutController.cs
    │   │   │   │   │   ├── TimeoutController.cs.meta
    │   │   │   │   │   ├── TriggerEvent.cs
    │   │   │   │   │   ├── TriggerEvent.cs.meta
    │   │   │   │   │   ├── Triggers/
    │   │   │   │   │   │   ├── AsyncAwakeTrigger.cs
    │   │   │   │   │   │   ├── AsyncAwakeTrigger.cs.meta
    │   │   │   │   │   │   ├── AsyncDestroyTrigger.cs
    │   │   │   │   │   │   ├── AsyncDestroyTrigger.cs.meta
    │   │   │   │   │   │   ├── AsyncStartTrigger.cs
    │   │   │   │   │   │   ├── AsyncStartTrigger.cs.meta
    │   │   │   │   │   │   ├── AsyncTriggerBase.cs
    │   │   │   │   │   │   ├── AsyncTriggerBase.cs.meta
    │   │   │   │   │   │   ├── AsyncTriggerExtensions.cs
    │   │   │   │   │   │   ├── AsyncTriggerExtensions.cs.meta
    │   │   │   │   │   │   ├── MonoBehaviourMessagesTriggers.cs
    │   │   │   │   │   │   ├── MonoBehaviourMessagesTriggers.cs.meta
    │   │   │   │   │   │   ├── MonoBehaviourMessagesTriggers.tt
    │   │   │   │   │   │   └── MonoBehaviourMessagesTriggers.tt.meta
    │   │   │   │   │   ├── Triggers.meta
    │   │   │   │   │   ├── UniTask.AsValueTask.cs
    │   │   │   │   │   ├── UniTask.AsValueTask.cs.meta
    │   │   │   │   │   ├── UniTask.Bridge.cs
    │   │   │   │   │   ├── UniTask.Bridge.cs.meta
    │   │   │   │   │   ├── UniTask.Delay.cs
    │   │   │   │   │   ├── UniTask.Delay.cs.meta
    │   │   │   │   │   ├── UniTask.Factory.cs
    │   │   │   │   │   ├── UniTask.Factory.cs.meta
    │   │   │   │   │   ├── UniTask.Run.cs
    │   │   │   │   │   ├── UniTask.Run.cs.meta
    │   │   │   │   │   ├── UniTask.Threading.cs
    │   │   │   │   │   ├── UniTask.Threading.cs.meta
    │   │   │   │   │   ├── UniTask.WaitUntil.cs
    │   │   │   │   │   ├── UniTask.WaitUntil.cs.meta
    │   │   │   │   │   ├── UniTask.WhenAll.Generated.cs
    │   │   │   │   │   ├── UniTask.WhenAll.Generated.cs.meta
    │   │   │   │   │   ├── UniTask.WhenAll.Generated.tt
    │   │   │   │   │   ├── UniTask.WhenAll.Generated.tt.meta
    │   │   │   │   │   ├── UniTask.WhenAll.cs
    │   │   │   │   │   ├── UniTask.WhenAll.cs.meta
    │   │   │   │   │   ├── UniTask.WhenAny.Generated.cs
    │   │   │   │   │   ├── UniTask.WhenAny.Generated.cs.meta
    │   │   │   │   │   ├── UniTask.WhenAny.Generated.tt
    │   │   │   │   │   ├── UniTask.WhenAny.Generated.tt.meta
    │   │   │   │   │   ├── UniTask.WhenAny.cs
    │   │   │   │   │   ├── UniTask.WhenAny.cs.meta
    │   │   │   │   │   ├── UniTask.WhenEach.cs
    │   │   │   │   │   ├── UniTask.WhenEach.cs.meta
    │   │   │   │   │   ├── UniTask.asmdef
    │   │   │   │   │   ├── UniTask.asmdef.meta
    │   │   │   │   │   ├── UniTask.cs
    │   │   │   │   │   ├── UniTask.cs.meta
    │   │   │   │   │   ├── UniTaskCompletionSource.cs
    │   │   │   │   │   ├── UniTaskCompletionSource.cs.meta
    │   │   │   │   │   ├── UniTaskExtensions.Shorthand.cs
    │   │   │   │   │   ├── UniTaskExtensions.Shorthand.cs.meta
    │   │   │   │   │   ├── UniTaskExtensions.Shorthand.tt
    │   │   │   │   │   ├── UniTaskExtensions.Shorthand.tt.meta
    │   │   │   │   │   ├── UniTaskExtensions.cs
    │   │   │   │   │   ├── UniTaskExtensions.cs.meta
    │   │   │   │   │   ├── UniTaskObservableExtensions.cs
    │   │   │   │   │   ├── UniTaskObservableExtensions.cs.meta
    │   │   │   │   │   ├── UniTaskScheduler.cs
    │   │   │   │   │   ├── UniTaskScheduler.cs.meta
    │   │   │   │   │   ├── UniTaskSynchronizationContext.cs
    │   │   │   │   │   ├── UniTaskSynchronizationContext.cs.meta
    │   │   │   │   │   ├── UniTaskVoid.cs
    │   │   │   │   │   ├── UniTaskVoid.cs.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.AssetBundleRequestAllAssets.cs
    │   │   │   │   │   ├── UnityAsyncExtensions.AssetBundleRequestAllAssets.cs.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.AsyncGPUReadback.cs
    │   │   │   │   │   ├── UnityAsyncExtensions.AsyncGPUReadback.cs.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.AsyncInstantiate.cs
    │   │   │   │   │   ├── UnityAsyncExtensions.AsyncInstantiate.cs.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.Jobs.cs
    │   │   │   │   │   ├── UnityAsyncExtensions.Jobs.cs.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.MonoBehaviour.cs
    │   │   │   │   │   ├── UnityAsyncExtensions.MonoBehaviour.cs.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.cs
    │   │   │   │   │   ├── UnityAsyncExtensions.cs.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.tt
    │   │   │   │   │   ├── UnityAsyncExtensions.tt.meta
    │   │   │   │   │   ├── UnityAsyncExtensions.uGUI.cs
    │   │   │   │   │   ├── UnityAsyncExtensions.uGUI.cs.meta
    │   │   │   │   │   ├── UnityAwaitableExtensions.cs
    │   │   │   │   │   ├── UnityAwaitableExtensions.cs.meta
    │   │   │   │   │   ├── UnityBindingExtensions.cs
    │   │   │   │   │   ├── UnityBindingExtensions.cs.meta
    │   │   │   │   │   ├── UnityWebRequestException.cs
    │   │   │   │   │   ├── UnityWebRequestException.cs.meta
    │   │   │   │   │   ├── _InternalVisibleTo.cs
    │   │   │   │   │   └── _InternalVisibleTo.cs.meta
    │   │   │   │   ├── Runtime.meta
    │   │   │   │   ├── package.json
    │   │   │   │   └── package.json.meta
    │   │   │   └── UniTask.meta
    │   │   ├── Plugins.meta
    │   │   ├── Scenes/
    │   │   │   ├── EditorTest1.cs
    │   │   │   ├── EditorTest1.cs.meta
    │   │   │   ├── ExceptionExamples.cs
    │   │   │   ├── ExceptionExamples.cs.meta
    │   │   │   ├── ExceptionExamples.unity
    │   │   │   ├── ExceptionExamples.unity.meta
    │   │   │   ├── MiddlewareSample.cs
    │   │   │   ├── MiddlewareSample.cs.meta
    │   │   │   ├── SandboxMain.cs
    │   │   │   ├── SandboxMain.cs.meta
    │   │   │   ├── SandboxMain.unity
    │   │   │   ├── SandboxMain.unity.meta
    │   │   │   ├── WaitWhileTest.cs
    │   │   │   └── WaitWhileTest.cs.meta
    │   │   ├── Scenes.meta
    │   │   ├── StreamingAssets/
    │   │   │   ├── test.txt
    │   │   │   └── test.txt.meta
    │   │   ├── StreamingAssets.meta
    │   │   ├── TempAsm/
    │   │   │   ├── FooMonoBehaviour.cs
    │   │   │   ├── FooMonoBehaviour.cs.meta
    │   │   │   ├── TempAsm.asmdef
    │   │   │   └── TempAsm.asmdef.meta
    │   │   ├── TempAsm.meta
    │   │   ├── Tests/
    │   │   │   ├── AsyncOperationTest.cs
    │   │   │   ├── AsyncOperationTest.cs.meta
    │   │   │   ├── AsyncTest.cs
    │   │   │   ├── AsyncTest.cs.meta
    │   │   │   ├── CachelikeTest.cs
    │   │   │   ├── CachelikeTest.cs.meta
    │   │   │   ├── CoroutineToUniTaskTest.cs
    │   │   │   ├── CoroutineToUniTaskTest.cs.meta
    │   │   │   ├── DelayTest.cs
    │   │   │   ├── DelayTest.cs.meta
    │   │   │   ├── Editor/
    │   │   │   │   ├── AsyncTestEditor.cs
    │   │   │   │   ├── AsyncTestEditor.cs.meta
    │   │   │   │   ├── RunTestEditor.cs
    │   │   │   │   ├── RunTestEditor.cs.meta
    │   │   │   │   ├── UniTask.Tests.Editor.asmdef
    │   │   │   │   ├── UniTask.Tests.Editor.asmdef.meta
    │   │   │   │   ├── WhenAnyTestEditor.cs
    │   │   │   │   └── WhenAnyTestEditor.cs.meta
    │   │   │   ├── Editor.meta
    │   │   │   ├── GenericsWhenAllAny.cs
    │   │   │   ├── GenericsWhenAllAny.cs.meta
    │   │   │   ├── PlayerLoopTimerTest.cs
    │   │   │   ├── PlayerLoopTimerTest.cs.meta
    │   │   │   ├── Preserve.cs
    │   │   │   ├── Preserve.cs.meta
    │   │   │   ├── Resources/
    │   │   │   │   └── sample_texture.png.meta
    │   │   │   ├── Resources.meta
    │   │   │   ├── RunTest.cs
    │   │   │   ├── RunTest.cs.meta
    │   │   │   ├── Shims.cs
    │   │   │   ├── Shims.cs.meta
    │   │   │   ├── UniTask.Tests.asmdef
    │   │   │   ├── UniTask.Tests.asmdef.meta
    │   │   │   ├── WhenAnyTest.cs
    │   │   │   └── WhenAnyTest.cs.meta
    │   │   └── Tests.meta
    │   ├── Packages/
    │   │   ├── manifest.json
    │   │   └── packages-lock.json
    │   └── ProjectSettings/
    │       ├── AudioManager.asset
    │       ├── ClusterInputManager.asset
    │       ├── DynamicsManager.asset
    │       ├── EditorBuildSettings.asset
    │       ├── EditorSettings.asset
    │       ├── GraphicsSettings.asset
    │       ├── InputManager.asset
    │       ├── MemorySettings.asset
    │       ├── NavMeshAreas.asset
    │       ├── NetworkManager.asset
    │       ├── PackageManagerSettings.asset
    │       ├── Physics2DSettings.asset
    │       ├── PresetManager.asset
    │       ├── ProjectSettings.asset
    │       ├── ProjectVersion.txt
    │       ├── QualitySettings.asset
    │       ├── SceneTemplateSettings.json
    │       ├── TagManager.asset
    │       ├── TimeManager.asset
    │       ├── UnityConnectSettings.asset
    │       ├── VFXManager.asset
    │       ├── VersionControlSettings.asset
    │       └── XRSettings.asset
    ├── UniTask.Analyzer/
    │   ├── Properties/
    │   │   └── launchSettings.json
    │   ├── UniTask.Analyzer.csproj
    │   └── UniTaskAnalyzer.cs
    ├── UniTask.NetCore/
    │   ├── NetCore/
    │   │   ├── AsyncEnumerableExtensions.cs
    │   │   ├── UniTask.Delay.cs
    │   │   ├── UniTask.Run.cs
    │   │   └── UniTask.Yield.cs
    │   └── UniTask.NetCore.csproj
    ├── UniTask.NetCoreSandbox/
    │   ├── Program.cs
    │   └── UniTask.NetCoreSandbox.csproj
    └── UniTask.NetCoreTests/
        ├── AsyncLazyTest.cs
        ├── AsyncReactivePropertyTest.cs
        ├── CancellationTokenTest.cs
        ├── ChannelTest.cs
        ├── CompletionSourceTest.cs
        ├── DeferTest.cs
        ├── Linq/
        │   ├── Aggregate.cs
        │   ├── AllAny.cs
        │   ├── Concat.cs
        │   ├── Convert.cs
        │   ├── CreateTest.cs
        │   ├── Factory.cs
        │   ├── Filtering.cs
        │   ├── FirstLast.cs
        │   ├── Joins.cs
        │   ├── Merge.cs
        │   ├── Paging.cs
        │   ├── Projection.cs
        │   ├── PulbishTest.cs
        │   ├── QueueTest.cs
        │   ├── Sets.cs
        │   ├── Sort.cs
        │   ├── TakeInfinityTest.cs
        │   └── _Exception.cs
        ├── TaskBuilderCases.cs
        ├── TaskExtensionsTest.cs
        ├── TriggerEventTest.cs
        ├── UniTask.NetCoreTests.csproj
        ├── UniTaskCompletionSourceTest.cs
        ├── WhenEachTest.cs
        └── WithCancellationTest.cs
Download .txt
Showing preview only (5,896K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5845 symbols across 208 files)

FILE: src/UniTask.Analyzer/UniTaskAnalyzer.cs
  class UniTaskAnalyzer (line 11) | [DiagnosticAnalyzer(LanguageNames.CSharp)]
    method Initialize (line 25) | public override void Initialize(AnalysisContext context)
    method AnalyzeOperation (line 33) | private static void AnalyzeOperation(OperationAnalysisContext context)

FILE: src/UniTask.NetCore/NetCore/AsyncEnumerableExtensions.cs
  class AsyncEnumerableExtensions (line 13) | public static class AsyncEnumerableExtensions
    method AsUniTaskAsyncEnumerable (line 15) | public static IUniTaskAsyncEnumerable<T> AsUniTaskAsyncEnumerable<T>(t...
    method AsAsyncEnumerable (line 20) | public static IAsyncEnumerable<T> AsAsyncEnumerable<T>(this IUniTaskAs...
    class AsyncEnumerableToUniTaskAsyncEnumerable (line 25) | sealed class AsyncEnumerableToUniTaskAsyncEnumerable<T> : IUniTaskAsyn...
      method AsyncEnumerableToUniTaskAsyncEnumerable (line 29) | public AsyncEnumerableToUniTaskAsyncEnumerable(IAsyncEnumerable<T> s...
      method GetAsyncEnumerator (line 34) | public IUniTaskAsyncEnumerator<T> GetAsyncEnumerator(CancellationTok...
      class Enumerator (line 39) | sealed class Enumerator : IUniTaskAsyncEnumerator<T>
        method Enumerator (line 43) | public Enumerator(IAsyncEnumerator<T> enumerator)
        method DisposeAsync (line 50) | public async UniTask DisposeAsync()
        method MoveNextAsync (line 55) | public async UniTask<bool> MoveNextAsync()
    class UniTaskAsyncEnumerableToAsyncEnumerable (line 62) | sealed class UniTaskAsyncEnumerableToAsyncEnumerable<T> : IAsyncEnumer...
      method UniTaskAsyncEnumerableToAsyncEnumerable (line 66) | public UniTaskAsyncEnumerableToAsyncEnumerable(IUniTaskAsyncEnumerab...
      method GetAsyncEnumerator (line 71) | public IAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken canc...
      class Enumerator (line 76) | sealed class Enumerator : IAsyncEnumerator<T>
        method Enumerator (line 80) | public Enumerator(IUniTaskAsyncEnumerator<T> enumerator)
        method DisposeAsync (line 87) | public ValueTask DisposeAsync()
        method MoveNextAsync (line 92) | public ValueTask<bool> MoveNextAsync()

FILE: src/UniTask.NetCore/NetCore/UniTask.Run.cs
  type UniTask (line 6) | public partial struct UniTask
    method Run (line 9) | public static async UniTask Run(Action action, bool configureAwait = t...
    method Run (line 35) | public static async UniTask Run(Action<object> action, object state, b...
    method Run (line 61) | public static async UniTask<T> Run<T>(Func<T> func, bool configureAwai...
    method Run (line 87) | public static async UniTask<T> Run<T>(Func<object, T> func, object sta...

FILE: src/UniTask.NetCore/NetCore/UniTask.Yield.cs
  type UniTask (line 9) | public partial struct UniTask
    method Yield (line 11) | public static UniTask.YieldAwaitable Yield()
    type YieldAwaitable (line 16) | public readonly struct YieldAwaitable
      method GetAwaiter (line 18) | public Awaiter GetAwaiter()
      type Awaiter (line 23) | public readonly struct Awaiter : ICriticalNotifyCompletion
        method GetResult (line 30) | public void GetResult() { }
        method OnCompleted (line 32) | public void OnCompleted(Action continuation)
        method UnsafeOnCompleted (line 37) | public void UnsafeOnCompleted(Action continuation)
        method Continuation (line 54) | static void Continuation(object state)
      class ThreadPoolWorkItem (line 62) | sealed class ThreadPoolWorkItem : IThreadPoolWorkItem, ITaskPoolNode...
        method ThreadPoolWorkItem (line 68) | static ThreadPoolWorkItem()
        method Create (line 75) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
        method Execute (line 87) | [MethodImpl(MethodImplOptions.AggressiveInlining)]

FILE: src/UniTask.NetCoreSandbox/Program.cs
  class Program (line 20) | public class Program
    method Main (line 22) | static async Task Main(string[] args)
    method FooAsync (line 44) | static async UniTask FooAsync(int x, CancellationToken cancellationTok...

FILE: src/UniTask.NetCoreTests/AsyncLazyTest.cs
  class AsyncLazyTest (line 15) | public class AsyncLazyTest
    method LazyLazy (line 17) | [Fact]
    method LazyImmediate (line 42) | [Fact]
    method AwaitAwait (line 67) | static async UniTask AwaitAwait(UniTask t)
    method After (line 73) | async UniTask After()
    method AfterException (line 81) | async UniTask AfterException()
  class AsyncLazyTest2 (line 90) | public class AsyncLazyTest2
    method LazyLazy (line 92) | [Fact]
    method LazyImmediate (line 118) | [Fact]
    method AwaitAwait (line 144) | static async UniTask<int> AwaitAwait(UniTask<int> t)
    method After (line 150) | async UniTask<int> After()
    method AfterException (line 159) | async UniTask<int> AfterException()

FILE: src/UniTask.NetCoreTests/AsyncReactivePropertyTest.cs
  class AsyncReactivePropertyTest (line 15) | public class AsyncReactivePropertyTest
    method Iteration (line 17) | [Fact]
    method WithoutCurrent (line 37) | [Fact]
    method StateFromEnumeration (line 96) | [Fact]
    method WaitAsyncTest (line 115) | [Fact]
    method WaitAsyncCancellationTest (line 143) | [Fact]
    method ReadOnlyWaitAsyncTest (line 161) | [Fact]
    method ReadOnlyWaitAsyncCancellationTest (line 176) | [Fact]

FILE: src/UniTask.NetCoreTests/CancellationTokenTest.cs
  class CancellationTokenTest (line 15) | public class CancellationTokenTest
    method WaitUntilCanceled (line 17) | [Fact]
    method AlreadyCanceled (line 33) | [Fact]
    method None (line 43) | [Fact]

FILE: src/UniTask.NetCoreTests/ChannelTest.cs
  class ChannelTest (line 15) | public class ChannelTest
    method CreateChannel (line 17) | (System.Threading.Channels.Channel<int>, Cysharp.Threading.Tasks.Chann...
    method SingleWriteSingleRead (line 31) | [Fact]
    method MultiWrite (line 57) | [Fact]
    method CompleteOnEmpty (line 92) | [Fact]
    method CompleteErrorOnEmpty (line 123) | [Fact]
    method CompleteWithRest (line 155) | [Fact]
    method CompleteErrorWithRest (line 199) | [Fact]
    method Cancellation (line 246) | [Fact]
    method AsyncEnumerator (line 262) | [Fact]
    method AsyncEnumeratorCancellation (line 283) | [Fact]

FILE: src/UniTask.NetCoreTests/CompletionSourceTest.cs
  class CompletionSourceTest (line 15) | public class CompletionSourceTest
    method SetFirst (line 17) | [Fact]
    method SingleOnFirst (line 65) | [Fact]
    method MultiOne (line 134) | [Fact]
    method MultiTwo (line 210) | [Fact]
    class TestException (line 294) | class TestException : Exception
  class CompletionSourceTest2 (line 300) | public class CompletionSourceTest2
    method SetFirst (line 302) | [Fact]
    method SingleOnFirst (line 352) | [Fact]
    method MultiOne (line 423) | [Fact]
    method MultiTwo (line 500) | [Fact]
    class TestException (line 585) | class TestException : Exception

FILE: src/UniTask.NetCoreTests/DeferTest.cs
  class DeferTest (line 15) | public class DeferTest
    method D (line 17) | [Fact]
    method D2 (line 32) | [Fact]

FILE: src/UniTask.NetCoreTests/Linq/Aggregate.cs
  class Aggregate (line 13) | public class Aggregate
    method Sum (line 15) | [Theory]
    method Average (line 56) | [Theory]
    method Min (line 152) | [Theory]
    method Max (line 239) | [Theory]
    class XX (line 324) | public class XX
      method XX (line 328) | public XX(X value)
    class X (line 334) | public class X : IComparable<X>
      method X (line 338) | public X(int value)
      method CompareTo (line 343) | public int CompareTo([AllowNull] X other)
    method Count (line 350) | [Theory]
    method AggregateTest1 (line 382) | [Fact]
    method AggregateTest2 (line 411) | [Fact]
    method AggregateTest3 (line 443) | [Fact]
    method ForEach (line 475) | [Fact]

FILE: src/UniTask.NetCoreTests/Linq/AllAny.cs
  class AllAny (line 15) | public class AllAny
    method AllTest (line 17) | [Theory]
    method AnyTest (line 33) | [Theory]
    method ContainsTest (line 57) | [Theory]
    method SequenceEqual (line 75) | [Fact]

FILE: src/UniTask.NetCoreTests/Linq/Concat.cs
  class Concat (line 15) | public class Concat
    method Append (line 17) | [Theory]
    method AppendThrow (line 30) | [Fact]
    method Prepend (line 43) | [Theory]
    method PrependThrow (line 56) | [Fact]
    method ConcatTest (line 79) | [Theory]
    method ConcatThrow (line 91) | [Fact]
    method DefaultIfEmpty (line 116) | [Fact]

FILE: src/UniTask.NetCoreTests/Linq/Convert.cs
  class Convert (line 14) | public class Convert
    method ToAsyncEnumerable (line 16) | [Fact]
    method ToObservable (line 32) | [Fact]
    method ToAsyncEnumerableTask (line 46) | [Fact]
    method ToAsyncEnumerableUniTask (line 56) | [Fact]
    method ToAsyncEnumerableObservable (line 66) | [Fact]
    method ToDictionary (line 91) | [Fact]
    method ToLookup (line 120) | [Fact]
    method ToList (line 160) | [Fact]
    method ToHashSet (line 177) | [Fact]

FILE: src/UniTask.NetCoreTests/Linq/CreateTest.cs
  class CreateTest (line 15) | public class CreateTest
    method SyncCreation (line 17) | [Fact]
    method SyncManually (line 36) | [Fact]
    method SyncExceptionFirst (line 75) | [Fact]
    method SyncException (line 93) | [Fact]
    method ASyncManually (line 115) | [Fact]
    method AwaitForeachBreak (line 162) | [Fact]
    method Range (line 186) | async IAsyncEnumerable<int> Range(int from, int count)

FILE: src/UniTask.NetCoreTests/Linq/Factory.cs
  class Factory (line 11) | public class Factory
    method RangeTest (line 13) | [Theory]
    method RepeatTest (line 28) | [Theory]
    method EmptyTest (line 42) | [Fact]
    method ReturnTest (line 51) | [Theory]

FILE: src/UniTask.NetCoreTests/Linq/Filtering.cs
  class Filtering (line 15) | public class Filtering
    method Where (line 17) | [Fact]
    method WhereException (line 50) | [Fact]
    method OfType (line 74) | [Fact]
    method OfTypeException (line 86) | [Fact]
    method Cast (line 96) | [Fact]
    method CastException (line 108) | [Fact]

FILE: src/UniTask.NetCoreTests/Linq/FirstLast.cs
  class FirstLast (line 14) | public class FirstLast
    method FirstTest (line 16) | [Fact]
    method LastTest (line 61) | [Fact]
    method SingleTest (line 106) | [Fact]
    method ElementAtTest (line 185) | [Fact]

FILE: src/UniTask.NetCoreTests/Linq/Joins.cs
  class Joins (line 16) | public class Joins
    method RandomRun (line 20) | static UniTask<T> RandomRun<T>(T value)
    method Join (line 32) | [Fact]
    method JoinThrow (line 45) | [Fact]
    method JoinAwait (line 60) | [Fact]
    method JoinAwaitThrow (line 73) | [Fact]
    method JoinAwaitCt (line 88) | [Fact]
    method JoinAwaitCtThrow (line 101) | [Fact]
    method GroupBy (line 117) | [Fact]
    method GroupByThrow (line 173) | [Fact]
    method GroupJoin (line 191) | [Fact]
    method GroupJoinThrow (line 221) | [Fact]

FILE: src/UniTask.NetCoreTests/Linq/Merge.cs
  class MergeTest (line 13) | public class MergeTest
    method TwoSource (line 15) | [Fact]
    method ThreeSource (line 51) | [Fact]
    method Throw (line 95) | [Fact]
    method Cancel (line 116) | [Fact]

FILE: src/UniTask.NetCoreTests/Linq/Paging.cs
  class Paging (line 15) | public class Paging
    method Skip (line 17) | [Theory]
    method SkipException (line 33) | [Fact]
    method SkipLast (line 42) | [Theory]
    method SkipLastException (line 58) | [Fact]
    method TakeLast (line 67) | [Theory]
    method TakeLastException (line 83) | [Fact]
    method Take (line 93) | [Theory]
    method TakeException (line 109) | [Fact]
    method SkipWhile (line 119) | [Theory]
    method SkipWhileException (line 167) | [Fact]
    method TakeWhile (line 202) | [Theory]
    method TakeWhileException (line 250) | [Fact]

FILE: src/UniTask.NetCoreTests/Linq/Projection.cs
  class Projection (line 15) | public class Projection
    method Reverse (line 17) | [Theory]
    method ReverseException (line 30) | [Fact]
    method Select (line 40) | [Theory]
    method SelectException (line 65) | [Fact]
    method SelectMany (line 92) | [Theory]
    method SelectManyException (line 166) | [Fact]
    method Zip (line 211) | [Theory]
    method ZipException (line 235) | [Fact]
    method Buffer (line 276) | [Theory]
    method BufferSkip (line 294) | [Theory]
    method BufferError (line 311) | [Fact]
    method CombineLatestOK (line 323) | [Fact]
    method CombineLatestLong (line 360) | [Fact]
    method CombineLatestError (line 378) | [Fact]
    method PariwiseImmediate (line 401) | [Fact]
    method Pariwise (line 408) | [Fact]
    class MyException (line 432) | class MyException : Exception

FILE: src/UniTask.NetCoreTests/Linq/PulbishTest.cs
  class PublishTest (line 13) | public class PublishTest
    method Normal (line 15) | [Fact]
    method Cancel (line 45) | [Fact]

FILE: src/UniTask.NetCoreTests/Linq/QueueTest.cs
  class QueueTest (line 12) | public class QueueTest
    method Q (line 14) | [Fact]

FILE: src/UniTask.NetCoreTests/Linq/Sets.cs
  class Sets (line 15) | public class Sets
    method Distinct (line 31) | [Theory]
    method DistinctThrow (line 44) | [Fact]
    method DistinctUntilChanged (line 68) | [Theory]
    method DistinctUntilChangedThrow (line 81) | [Fact]
    method Except (line 106) | [Fact]
    method ExceptThrow (line 120) | [Fact]
    method Intersect (line 135) | [Fact]
    method IntersectThrow (line 149) | [Fact]
    method Union (line 164) | [Fact]
    method UnionThrow (line 178) | [Fact]

FILE: src/UniTask.NetCoreTests/Linq/Sort.cs
  class SortCheck (line 16) | public class SortCheck
    method ToString (line 22) | public override string ToString()
  class Sort (line 28) | public class Sort
    method RandomRun (line 32) | static UniTask<T> RandomRun<T>(T value)
    method RandomRun (line 43) | static UniTask<T> RandomRun<T>(T value, CancellationToken ct)
    method OrderBy (line 55) | [Fact]
    method ThenBy (line 91) | [Fact]
    method Throws (line 179) | [Fact]

FILE: src/UniTask.NetCoreTests/Linq/TakeInfinityTest.cs
  class TakeInfinityTest (line 13) | public class TakeInfinityTest
    method Take (line 15) | [Fact]
    method TakeWhile (line 30) | [Fact]
    method TakeUntilCanceled (line 45) | [Fact]
    method SkipUntilCanceled (line 74) | [Fact]
    method TakeUntil (line 105) | [Fact]
    method SkipUntil (line 134) | [Fact]

FILE: src/UniTask.NetCoreTests/Linq/_Exception.cs
  class UniTaskTestException (line 10) | public class UniTaskTestException : Exception
    method ThrowImmediate (line 12) | public static IUniTaskAsyncEnumerable<int> ThrowImmediate()
    method ThrowAfter (line 16) | public static IUniTaskAsyncEnumerable<int> ThrowAfter()
    method ThrowInMoveNext (line 20) | public static IUniTaskAsyncEnumerable<int> ThrowInMoveNext()
    method Throws (line 26) | public static IEnumerable<IUniTaskAsyncEnumerable<int>> Throws(int cou...
  class ThrowIn (line 37) | internal class ThrowIn<TValue> : IUniTaskAsyncEnumerable<TValue>
    method ThrowIn (line 41) | public ThrowIn(Exception exception)
    method GetAsyncEnumerator (line 46) | public IUniTaskAsyncEnumerator<TValue> GetAsyncEnumerator(Cancellation...
    class Enumerator (line 51) | class Enumerator : IUniTaskAsyncEnumerator<TValue>
      method Enumerator (line 56) | public Enumerator(Exception exception, CancellationToken cancellatio...
      method MoveNextAsync (line 64) | public UniTask<bool> MoveNextAsync()
      method DisposeAsync (line 70) | public UniTask DisposeAsync()
  class ThrowAfter (line 77) | internal class ThrowAfter<TValue> : IUniTaskAsyncEnumerable<TValue>
    method ThrowAfter (line 81) | public ThrowAfter(Exception exception)
    method GetAsyncEnumerator (line 86) | public IUniTaskAsyncEnumerator<TValue> GetAsyncEnumerator(Cancellation...
    class Enumerator (line 91) | class Enumerator : IUniTaskAsyncEnumerator<TValue>
      method Enumerator (line 96) | public Enumerator(Exception exception, CancellationToken cancellatio...
      method MoveNextAsync (line 104) | public UniTask<bool> MoveNextAsync()
      method DisposeAsync (line 120) | public UniTask DisposeAsync()

FILE: src/UniTask.NetCoreTests/TaskBuilderCases.cs
  class UniTaskBuilderTest (line 18) | public class UniTaskBuilderTest
    method Empty (line 20) | [Fact]
    method EmptyThrow (line 30) | [Fact]
    method Task_Done (line 41) | [Fact]
    method Task_Fail (line 52) | [Fact]
    method Task_Cancel (line 63) | [Fact]
    method AwaitUnsafeOnCompletedCall_Task_SetResult (line 74) | [Fact]
    method AwaitUnsafeOnCompletedCall_Task_SetException (line 87) | [Fact]
    method AwaitUnsafeOnCompletedCall_Task_SetCancelException (line 100) | [Fact]
  class UniTask_T_BuilderTest (line 114) | public class UniTask_T_BuilderTest
    method Empty (line 116) | [Fact]
    method EmptyThrow (line 127) | [Fact]
    method Task_Done (line 138) | [Fact]
    method Task_Fail (line 149) | [Fact]
    method Task_Cancel (line 160) | [Fact]
    method AwaitUnsafeOnCompletedCall_Task_SetResult (line 171) | [Fact]
    method AwaitUnsafeOnCompletedCall_Task_SetException (line 186) | [Fact]
    method AwaitUnsafeOnCompletedCall_Task_SetCancelException (line 199) | [Fact]
  class TaskTestException (line 213) | public class TaskTestException : Exception
  type TestAwaiter (line 218) | public struct TestAwaiter : ICriticalNotifyCompletion
    method TestAwaiter (line 223) | public TestAwaiter(bool isCompleted, UniTaskStatus status)
    method GetAwaiter (line 229) | public TestAwaiter GetAwaiter() => this;
    method GetResult (line 233) | public void GetResult()
    method OnCompleted (line 248) | public void OnCompleted(Action continuation)
    method UnsafeOnCompleted (line 253) | public void UnsafeOnCompleted(Action continuation)
    method TestAwaiter (line 265) | public TestAwaiter(bool isCompleted, UniTaskStatus status, T value)
    method GetAwaiter (line 272) | public TestAwaiter<T> GetAwaiter() => this;
    method GetResult (line 276) | public T GetResult()
    method OnCompleted (line 291) | public void OnCompleted(Action continuation)
    method UnsafeOnCompleted (line 296) | public void UnsafeOnCompleted(Action continuation)
  type TestAwaiter (line 259) | public struct TestAwaiter<T> : ICriticalNotifyCompletion
    method TestAwaiter (line 223) | public TestAwaiter(bool isCompleted, UniTaskStatus status)
    method GetAwaiter (line 229) | public TestAwaiter GetAwaiter() => this;
    method GetResult (line 233) | public void GetResult()
    method OnCompleted (line 248) | public void OnCompleted(Action continuation)
    method UnsafeOnCompleted (line 253) | public void UnsafeOnCompleted(Action continuation)
    method TestAwaiter (line 265) | public TestAwaiter(bool isCompleted, UniTaskStatus status, T value)
    method GetAwaiter (line 272) | public TestAwaiter<T> GetAwaiter() => this;
    method GetResult (line 276) | public T GetResult()
    method OnCompleted (line 291) | public void OnCompleted(Action continuation)
    method UnsafeOnCompleted (line 296) | public void UnsafeOnCompleted(Action continuation)

FILE: src/UniTask.NetCoreTests/TaskExtensionsTest.cs
  class TaskExtensionsTest (line 10) | public class TaskExtensionsTest
    method PropagateException (line 12) | [Fact]
    method PropagateExceptionWhenAll (line 26) | [Fact]
    method ThrowAsync (line 35) | async Task ThrowAsync()
    method ThrowOrValueAsync (line 40) | async Task<int> ThrowOrValueAsync()

FILE: src/UniTask.NetCoreTests/TriggerEventTest.cs
  class TriggerEventTest (line 15) | public class TriggerEventTest
    method SimpleAdd (line 17) | [Fact]
    method AddFour (line 79) | [Fact]
    method OneRemove (line 176) | [Fact]
    method TwoRemove (line 208) | [Fact]
    method ThreeRemove (line 240) | [Fact]
    method RemoveSelf (line 273) | [Fact]
    method RemoveNextInIterating (line 281) | [Fact]
    method RemoveNextNextTest (line 289) | [Fact]
    method AddTest (line 297) | [Fact]
    class RemoveMe (line 304) | public class RemoveMe
      method Run1 (line 308) | public void Run1()
      method Run2 (line 329) | public void Run2()
      method Run3 (line 350) | public void Run3()
    class RemoveNext (line 372) | public class RemoveNext
      method Run1 (line 376) | public void Run1()
      method Run2 (line 398) | public void Run2()
      method Run3 (line 420) | public void Run3()
    class RemoveNextNext (line 443) | public class RemoveNextNext
      method Run1 (line 447) | public void Run1()
      method Run2 (line 473) | public void Run2()
    class AddMe (line 502) | public class AddMe
      method Run1 (line 506) | public void Run1()
      method Run2 (line 542) | public void Run2()
  class TestEvent (line 584) | public class TestEvent : ITriggerHandler<int>
    method TestEvent (line 589) | public TestEvent(int id)
    method TestEvent (line 594) | public TestEvent(int id, Action iteratingEvent)
    method OnCanceled (line 608) | public void OnCanceled(CancellationToken cancellationToken)
    method OnCompleted (line 614) | public void OnCompleted()
    method OnError (line 619) | public void OnError(Exception ex)
    method OnNext (line 624) | public void OnNext(int value)
    method ToString (line 630) | public override string ToString()

FILE: src/UniTask.NetCoreTests/UniTaskCompletionSourceTest.cs
  class AutoResetUniTaskCompletionSourceTest (line 9) | public class AutoResetUniTaskCompletionSourceTest
    method SetResultAfterReturn (line 11) | [Fact]
    method SetCancelAfterReturn (line 27) | [Fact]
    method SetExceptionAfterReturn (line 37) | [Fact]
    method SetResultWithValueAfterReturn (line 47) | [Fact]
    method SetCancelWithValueAfterReturn (line 62) | [Fact]
    method SetExceptionWithValueAfterReturn (line 71) | [Fact]

FILE: src/UniTask.NetCoreTests/WhenEachTest.cs
  class WhenEachTest (line 12) | public class WhenEachTest
    method Each (line 14) | [Fact]
    method Error (line 30) | [Fact]
    method Delay (line 56) | async UniTask<int> Delay(int id, int sleep)
    method Delay2 (line 62) | async UniTask<int> Delay2(int id, int sleep)

FILE: src/UniTask.NetCoreTests/WithCancellationTest.cs
  class WithCancellationTest (line 12) | public class WithCancellationTest
    method Standard (line 14) | [Fact]
    method Cancel (line 24) | [Fact]

FILE: src/UniTask/Assets/Editor/EditorRunnerChecker.cs
  class EditorRunnerChecker (line 11) | public static class EditorRunnerChecker
    method RunUniTaskAsync (line 13) | [MenuItem("Tools/UniTaskEditorRunnerChecker")]
    method RunCore (line 19) | static async UniTaskVoid RunCore()

FILE: src/UniTask/Assets/Editor/PackageExporter.cs
  class PackageExporter (line 9) | public static class PackageExporter
    method Export (line 11) | [MenuItem("Tools/Export Unitypackage")]
    method GetVersion (line 36) | static string GetVersion(string root)
    class Version (line 67) | public class Version

FILE: src/UniTask/Assets/Plugins/UniTask/Editor/SplitterGUILayout.cs
  class SplitterGUILayout (line 12) | internal static class SplitterGUILayout
    method CreateSplitterState (line 46) | public static object CreateSplitterState(float[] relativeSizes, int[] ...
    method BeginVerticalSplit (line 51) | public static void BeginVerticalSplit(object splitterState, params GUI...
    method EndVerticalSplit (line 56) | public static void EndVerticalSplit()

FILE: src/UniTask/Assets/Plugins/UniTask/Editor/UniTaskTrackerTreeView.cs
  class UniTaskTrackerViewItem (line 16) | public class UniTaskTrackerViewItem : TreeViewItem
    method GetFirstLine (line 37) | static string GetFirstLine(string str)
    method UniTaskTrackerViewItem (line 52) | public UniTaskTrackerViewItem(int id) : base(id)
  class UniTaskTrackerTreeView (line 58) | public class UniTaskTrackerTreeView : TreeView
    method UniTaskTrackerTreeView (line 64) | public UniTaskTrackerTreeView()
    method UniTaskTrackerTreeView (line 75) | UniTaskTrackerTreeView(TreeViewState state, MultiColumnHeader header)
    method ReloadAndSort (line 89) | public void ReloadAndSort()
    method Header_sortingChanged (line 97) | private void Header_sortingChanged(MultiColumnHeader multiColumnHeader)
    method BuildRoot (line 128) | protected override TreeViewItem BuildRoot()
    method CanMultiSelect (line 144) | protected override bool CanMultiSelect(TreeViewItem item)
    method RowGUI (line 149) | protected override void RowGUI(RowGUIArgs args)

FILE: src/UniTask/Assets/Plugins/UniTask/Editor/UniTaskTrackerWindow.cs
  class UniTaskTrackerWindow (line 14) | public class UniTaskTrackerWindow : EditorWindow
    method OpenWindow (line 20) | [MenuItem("Window/UniTask Tracker")]
    method OnEnable (line 37) | void OnEnable()
    method OnGUI (line 47) | void OnGUI()
    method RenderHeadPanel (line 76) | void RenderHeadPanel()
    method RenderTable (line 121) | void RenderTable()
    method Update (line 150) | private void Update()
    method RenderDetailsPanel (line 172) | void RenderDetailsPanel()

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncLazy.cs
  class AsyncLazy (line 8) | public class AsyncLazy
    method AsyncLazy (line 19) | public AsyncLazy(Func<UniTask> taskFactory)
    method AsyncLazy (line 27) | internal AsyncLazy(UniTask task)
    method GetAwaiter (line 56) | public UniTask.Awaiter GetAwaiter() => Task.GetAwaiter();
    method EnsureInitialized (line 58) | void EnsureInitialized()
    method EnsureInitializedCore (line 68) | void EnsureInitializedCore()
    method SetCompletionSource (line 95) | void SetCompletionSource(in UniTask.Awaiter awaiter)
    method SetCompletionSource (line 108) | static void SetCompletionSource(object state)
    method AsyncLazy (line 138) | public AsyncLazy(Func<UniTask<T>> taskFactory)
    method AsyncLazy (line 146) | internal AsyncLazy(UniTask<T> task)
    method GetAwaiter (line 175) | public UniTask<T>.Awaiter GetAwaiter() => Task.GetAwaiter();
    method EnsureInitialized (line 177) | void EnsureInitialized()
    method EnsureInitializedCore (line 187) | void EnsureInitializedCore()
    method SetCompletionSource (line 214) | void SetCompletionSource(in UniTask<T>.Awaiter awaiter)
    method SetCompletionSource (line 227) | static void SetCompletionSource(object state)
  class AsyncLazy (line 127) | public class AsyncLazy<T>
    method AsyncLazy (line 19) | public AsyncLazy(Func<UniTask> taskFactory)
    method AsyncLazy (line 27) | internal AsyncLazy(UniTask task)
    method GetAwaiter (line 56) | public UniTask.Awaiter GetAwaiter() => Task.GetAwaiter();
    method EnsureInitialized (line 58) | void EnsureInitialized()
    method EnsureInitializedCore (line 68) | void EnsureInitializedCore()
    method SetCompletionSource (line 95) | void SetCompletionSource(in UniTask.Awaiter awaiter)
    method SetCompletionSource (line 108) | static void SetCompletionSource(object state)
    method AsyncLazy (line 138) | public AsyncLazy(Func<UniTask<T>> taskFactory)
    method AsyncLazy (line 146) | internal AsyncLazy(UniTask<T> task)
    method GetAwaiter (line 175) | public UniTask<T>.Awaiter GetAwaiter() => Task.GetAwaiter();
    method EnsureInitialized (line 177) | void EnsureInitialized()
    method EnsureInitializedCore (line 187) | void EnsureInitializedCore()
    method SetCompletionSource (line 214) | void SetCompletionSource(in UniTask<T>.Awaiter awaiter)
    method SetCompletionSource (line 227) | static void SetCompletionSource(object state)

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncReactiveProperty.cs
  type IReadOnlyAsyncReactiveProperty (line 6) | public interface IReadOnlyAsyncReactiveProperty<T> : IUniTaskAsyncEnumer...
    method WithoutCurrent (line 9) | IUniTaskAsyncEnumerable<T> WithoutCurrent();
    method WaitAsync (line 10) | UniTask<T> WaitAsync(CancellationToken cancellationToken = default);
  type IAsyncReactiveProperty (line 13) | public interface IAsyncReactiveProperty<T> : IReadOnlyAsyncReactivePrope...
  class AsyncReactiveProperty (line 18) | [Serializable]
    method AsyncReactiveProperty (line 41) | public AsyncReactiveProperty(T value)
    method WithoutCurrent (line 47) | public IUniTaskAsyncEnumerable<T> WithoutCurrent()
    method GetAsyncEnumerator (line 52) | public IUniTaskAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken...
    method Dispose (line 57) | public void Dispose()
    method ToString (line 67) | public override string ToString()
    method WaitAsync (line 73) | public UniTask<T> WaitAsync(CancellationToken cancellationToken = defa...
    method AsyncReactiveProperty (line 80) | static AsyncReactiveProperty()
    class WaitAsyncSource (line 85) | sealed class WaitAsyncSource : IUniTaskSource<T>, ITriggerHandler<T>, ...
      method WaitAsyncSource (line 93) | static WaitAsyncSource()
      method WaitAsyncSource (line 103) | WaitAsyncSource()
      method Create (line 107) | public static IUniTaskSource<T> Create(AsyncReactiveProperty<T> pare...
      method TryReturn (line 135) | bool TryReturn()
      method CancellationCallback (line 147) | static void CancellationCallback(object state)
      method GetResult (line 155) | public T GetResult(short token)
      method GetResult (line 167) | void IUniTaskSource.GetResult(short token)
      method OnCompleted (line 172) | public void OnCompleted(Action<object> continuation, object state, s...
      method GetStatus (line 177) | public UniTaskStatus GetStatus(short token)
      method UnsafeGetStatus (line 182) | public UniTaskStatus UnsafeGetStatus()
      method OnCanceled (line 192) | public void OnCanceled(CancellationToken cancellationToken)
      method OnCompleted (line 197) | public void OnCompleted()
      method OnError (line 203) | public void OnError(Exception ex)
      method OnNext (line 208) | public void OnNext(T value)
    class WithoutCurrentEnumerable (line 214) | sealed class WithoutCurrentEnumerable : IUniTaskAsyncEnumerable<T>
      method WithoutCurrentEnumerable (line 218) | public WithoutCurrentEnumerable(AsyncReactiveProperty<T> parent)
      method GetAsyncEnumerator (line 223) | public IUniTaskAsyncEnumerator<T> GetAsyncEnumerator(CancellationTok...
    class Enumerator (line 229) | sealed class Enumerator : MoveNextSource, IUniTaskAsyncEnumerator<T>, ...
      method Enumerator (line 240) | public Enumerator(AsyncReactiveProperty<T> parent, CancellationToken...
      method MoveNextAsync (line 260) | public UniTask<bool> MoveNextAsync()
      method DisposeAsync (line 274) | public UniTask DisposeAsync()
      method OnNext (line 286) | public void OnNext(T value)
      method OnCanceled (line 292) | public void OnCanceled(CancellationToken cancellationToken)
      method OnCompleted (line 297) | public void OnCompleted()
      method OnError (line 302) | public void OnError(Exception ex)
      method CancellationCallback (line 307) | static void CancellationCallback(object state)
    class ReadOnlyAsyncReactiveProperty (line 315) | public class ReadOnlyAsyncReactiveProperty<T> : IReadOnlyAsyncReactive...
      method ReadOnlyAsyncReactiveProperty (line 330) | public ReadOnlyAsyncReactiveProperty(T initialValue, IUniTaskAsyncEn...
      method ReadOnlyAsyncReactiveProperty (line 336) | public ReadOnlyAsyncReactiveProperty(IUniTaskAsyncEnumerable<T> sour...
      method ConsumeEnumerator (line 341) | async UniTaskVoid ConsumeEnumerator(IUniTaskAsyncEnumerable<T> sourc...
      method WithoutCurrent (line 360) | public IUniTaskAsyncEnumerable<T> WithoutCurrent()
      method GetAsyncEnumerator (line 365) | public IUniTaskAsyncEnumerator<T> GetAsyncEnumerator(CancellationTok...
      method Dispose (line 370) | public void Dispose()
      method ToString (line 385) | public override string ToString()
      method WaitAsync (line 391) | public UniTask<T> WaitAsync(CancellationToken cancellationToken = de...
      method ReadOnlyAsyncReactiveProperty (line 398) | static ReadOnlyAsyncReactiveProperty()
      class WaitAsyncSource (line 403) | sealed class WaitAsyncSource : IUniTaskSource<T>, ITriggerHandler<T>...
        method WaitAsyncSource (line 411) | static WaitAsyncSource()
        method WaitAsyncSource (line 421) | WaitAsyncSource()
        method Create (line 425) | public static IUniTaskSource<T> Create(ReadOnlyAsyncReactiveProper...
        method TryReturn (line 453) | bool TryReturn()
        method CancellationCallback (line 465) | static void CancellationCallback(object state)
        method GetResult (line 473) | public T GetResult(short token)
        method GetResult (line 485) | void IUniTaskSource.GetResult(short token)
        method OnCompleted (line 490) | public void OnCompleted(Action<object> continuation, object state,...
        method GetStatus (line 495) | public UniTaskStatus GetStatus(short token)
        method UnsafeGetStatus (line 500) | public UniTaskStatus UnsafeGetStatus()
        method OnCanceled (line 510) | public void OnCanceled(CancellationToken cancellationToken)
        method OnCompleted (line 515) | public void OnCompleted()
        method OnError (line 521) | public void OnError(Exception ex)
        method OnNext (line 526) | public void OnNext(T value)
      class WithoutCurrentEnumerable (line 532) | sealed class WithoutCurrentEnumerable : IUniTaskAsyncEnumerable<T>
        method WithoutCurrentEnumerable (line 536) | public WithoutCurrentEnumerable(ReadOnlyAsyncReactiveProperty<T> p...
        method GetAsyncEnumerator (line 541) | public IUniTaskAsyncEnumerator<T> GetAsyncEnumerator(CancellationT...
      class Enumerator (line 547) | sealed class Enumerator : MoveNextSource, IUniTaskAsyncEnumerator<T>...
        method Enumerator (line 558) | public Enumerator(ReadOnlyAsyncReactiveProperty<T> parent, Cancell...
        method MoveNextAsync (line 577) | public UniTask<bool> MoveNextAsync()
        method DisposeAsync (line 591) | public UniTask DisposeAsync()
        method OnNext (line 603) | public void OnNext(T value)
        method OnCanceled (line 609) | public void OnCanceled(CancellationToken cancellationToken)
        method OnCompleted (line 614) | public void OnCompleted()
        method OnError (line 619) | public void OnError(Exception ex)
        method CancellationCallback (line 624) | static void CancellationCallback(object state)
    class StateExtensions (line 632) | public static class StateExtensions
      method ToReadOnlyAsyncReactiveProperty (line 634) | public static ReadOnlyAsyncReactiveProperty<T> ToReadOnlyAsyncReacti...
      method ToReadOnlyAsyncReactiveProperty (line 639) | public static ReadOnlyAsyncReactiveProperty<T> ToReadOnlyAsyncReacti...

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncUnit.cs
  type AsyncUnit (line 7) | public readonly struct AsyncUnit : IEquatable<AsyncUnit>
    method GetHashCode (line 11) | public override int GetHashCode()
    method Equals (line 16) | public bool Equals(AsyncUnit other)
    method ToString (line 21) | public override string ToString()

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenEqualityComparer.cs
  class CancellationTokenEqualityComparer (line 8) | public class CancellationTokenEqualityComparer : IEqualityComparer<Cance...
    method Equals (line 12) | public bool Equals(CancellationToken x, CancellationToken y)
    method GetHashCode (line 17) | public int GetHashCode(CancellationToken obj)

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenExtensions.cs
  class CancellationTokenExtensions (line 9) | public static class CancellationTokenExtensions
    method ToCancellationToken (line 14) | public static CancellationToken ToCancellationToken(this UniTask task)
    method ToCancellationToken (line 21) | public static CancellationToken ToCancellationToken(this UniTask task,...
    method ToCancellationToken (line 39) | public static CancellationToken ToCancellationToken<T>(this UniTask<T>...
    method ToCancellationToken (line 44) | public static CancellationToken ToCancellationToken<T>(this UniTask<T>...
    method ToCancellationTokenCore (line 49) | static async UniTaskVoid ToCancellationTokenCore(UniTask task, Cancell...
    method ToUniTask (line 63) | public static (UniTask, CancellationTokenRegistration) ToUniTask(this ...
    method Callback (line 74) | static void Callback(object state)
    method WaitUntilCanceled (line 80) | public static CancellationTokenAwaitable WaitUntilCanceled(this Cancel...
    method RegisterWithoutCaptureExecutionContext (line 85) | public static CancellationTokenRegistration RegisterWithoutCaptureExec...
    method RegisterWithoutCaptureExecutionContext (line 107) | public static CancellationTokenRegistration RegisterWithoutCaptureExec...
    method AddTo (line 129) | public static CancellationTokenRegistration AddTo(this IDisposable dis...
    method DisposeCallback (line 134) | static void DisposeCallback(object state)
  type CancellationTokenAwaitable (line 141) | public struct CancellationTokenAwaitable
    method CancellationTokenAwaitable (line 145) | public CancellationTokenAwaitable(CancellationToken cancellationToken)
    method GetAwaiter (line 150) | public Awaiter GetAwaiter()
    type Awaiter (line 155) | public struct Awaiter : ICriticalNotifyCompletion
      method Awaiter (line 159) | public Awaiter(CancellationToken cancellationToken)
      method GetResult (line 166) | public void GetResult()
      method OnCompleted (line 170) | public void OnCompleted(Action continuation)
      method UnsafeOnCompleted (line 175) | public void UnsafeOnCompleted(Action continuation)

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenSourceExtensions.cs
  class CancellationTokenSourceExtensions (line 12) | public static partial class CancellationTokenSourceExtensions
    method CancelCancellationTokenSourceState (line 16) | static void CancelCancellationTokenSourceState(object state)
    method CancelAfterSlim (line 22) | public static IDisposable CancelAfterSlim(this CancellationTokenSource...
    method CancelAfterSlim (line 27) | public static IDisposable CancelAfterSlim(this CancellationTokenSource...
    method RegisterRaiseCancelOnDestroy (line 32) | public static void RegisterRaiseCancelOnDestroy(this CancellationToken...
    method RegisterRaiseCancelOnDestroy (line 37) | public static void RegisterRaiseCancelOnDestroy(this CancellationToken...

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Channel.cs
  class Channel (line 7) | public static class Channel
    method CreateSingleConsumerUnbounded (line 9) | public static Channel<T> CreateSingleConsumerUnbounded<T>()
  class Channel (line 15) | public abstract class Channel<TWrite, TRead>
    method CreateSingleConsumerUnbounded (line 9) | public static Channel<T> CreateSingleConsumerUnbounded<T>()
  class Channel (line 24) | public abstract class Channel<T> : Channel<T, T>
    method CreateSingleConsumerUnbounded (line 9) | public static Channel<T> CreateSingleConsumerUnbounded<T>()
  class ChannelReader (line 28) | public abstract class ChannelReader<T>
    method TryRead (line 30) | public abstract bool TryRead(out T item);
    method WaitToReadAsync (line 31) | public abstract UniTask<bool> WaitToReadAsync(CancellationToken cancel...
    method ReadAsync (line 35) | public virtual UniTask<T> ReadAsync(CancellationToken cancellationToke...
    method ReadAsyncCore (line 45) | async UniTask<T> ReadAsyncCore(CancellationToken cancellationToken = d...
    method ReadAllAsync (line 58) | public abstract IUniTaskAsyncEnumerable<T> ReadAllAsync(CancellationTo...
  class ChannelWriter (line 61) | public abstract class ChannelWriter<T>
    method TryWrite (line 63) | public abstract bool TryWrite(T item);
    method TryComplete (line 64) | public abstract bool TryComplete(Exception error = null);
    method Complete (line 66) | public void Complete(Exception error = null)
  class ChannelClosedException (line 75) | public partial class ChannelClosedException : InvalidOperationException
    method ChannelClosedException (line 77) | public ChannelClosedException() :
    method ChannelClosedException (line 81) | public ChannelClosedException(string message) : base(message) { }
    method ChannelClosedException (line 83) | public ChannelClosedException(Exception innerException) :
    method ChannelClosedException (line 87) | public ChannelClosedException(string message, Exception innerException...
  class SingleConsumerUnboundedChannel (line 90) | internal class SingleConsumerUnboundedChannel<T> : Channel<T>
    method SingleConsumerUnboundedChannel (line 100) | public SingleConsumerUnboundedChannel()
    class SingleConsumerUnboundedChannelWriter (line 108) | sealed class SingleConsumerUnboundedChannelWriter : ChannelWriter<T>
      method SingleConsumerUnboundedChannelWriter (line 112) | public SingleConsumerUnboundedChannelWriter(SingleConsumerUnboundedC...
      method TryWrite (line 117) | public override bool TryWrite(T item)
      method TryComplete (line 136) | public override bool TryComplete(Exception error = null)
    class SingleConsumerUnboundedChannelReader (line 183) | sealed class SingleConsumerUnboundedChannelReader : ChannelReader<T>, ...
      method SingleConsumerUnboundedChannelReader (line 193) | public SingleConsumerUnboundedChannelReader(SingleConsumerUnboundedC...
      method TryRead (line 216) | public override bool TryRead(out T item)
      method WaitToReadAsync (line 261) | public override UniTask<bool> WaitToReadAsync(CancellationToken canc...
      method SingalContinuation (line 302) | public void SingalContinuation()
      method SingalCancellation (line 307) | public void SingalCancellation(CancellationToken cancellationToken)
      method SingalCompleted (line 313) | public void SingalCompleted(Exception error)
      method ReadAllAsync (line 327) | public override IUniTaskAsyncEnumerable<T> ReadAllAsync(Cancellation...
      method GetResult (line 332) | bool IUniTaskSource<bool>.GetResult(short token)
      method GetResult (line 337) | void IUniTaskSource.GetResult(short token)
      method GetStatus (line 342) | UniTaskStatus IUniTaskSource.GetStatus(short token)
      method OnCompleted (line 347) | void IUniTaskSource.OnCompleted(Action<object> continuation, object ...
      method UnsafeGetStatus (line 352) | UniTaskStatus IUniTaskSource.UnsafeGetStatus()
      method CancellationCallback (line 357) | static void CancellationCallback(object state)
      class ReadAllAsyncEnumerable (line 363) | sealed class ReadAllAsyncEnumerable : IUniTaskAsyncEnumerable<T>, IU...
        method ReadAllAsyncEnumerable (line 378) | public ReadAllAsyncEnumerable(SingleConsumerUnboundedChannelReader...
        method GetAsyncEnumerator (line 384) | public IUniTaskAsyncEnumerator<T> GetAsyncEnumerator(CancellationT...
        method MoveNextAsync (line 423) | public UniTask<bool> MoveNextAsync()
        method DisposeAsync (line 429) | public UniTask DisposeAsync()
        method CancellationCallback1 (line 436) | static void CancellationCallback1(object state)
        method CancellationCallback2 (line 442) | static void CancellationCallback2(object state)

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncMethodBuilderAttribute.cs
  class AsyncMethodBuilderAttribute (line 7) | internal sealed class AsyncMethodBuilderAttribute : Attribute
    method AsyncMethodBuilderAttribute (line 11) | public AsyncMethodBuilderAttribute(Type builderType)

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncUniTaskMethodBuilder.cs
  type AsyncUniTaskMethodBuilder (line 12) | [StructLayout(LayoutKind.Auto)]
    method Create (line 19) | [DebuggerHidden]
    method SetException (line 49) | [DebuggerHidden]
    method SetResult (line 64) | [DebuggerHidden]
    method AwaitOnCompleted (line 75) | [DebuggerHidden]
    method AwaitUnsafeOnCompleted (line 90) | [DebuggerHidden]
    method Start (line 106) | [DebuggerHidden]
    method SetStateMachine (line 115) | [DebuggerHidden]
    method Create (line 146) | [DebuggerHidden]
    method SetException (line 176) | [DebuggerHidden]
    method SetResult (line 191) | [DebuggerHidden]
    method AwaitOnCompleted (line 206) | [DebuggerHidden]
    method AwaitUnsafeOnCompleted (line 221) | [DebuggerHidden]
    method Start (line 237) | [DebuggerHidden]
    method SetStateMachine (line 246) | [DebuggerHidden]
  type AsyncUniTaskMethodBuilder (line 138) | [StructLayout(LayoutKind.Auto)]
    method Create (line 19) | [DebuggerHidden]
    method SetException (line 49) | [DebuggerHidden]
    method SetResult (line 64) | [DebuggerHidden]
    method AwaitOnCompleted (line 75) | [DebuggerHidden]
    method AwaitUnsafeOnCompleted (line 90) | [DebuggerHidden]
    method Start (line 106) | [DebuggerHidden]
    method SetStateMachine (line 115) | [DebuggerHidden]
    method Create (line 146) | [DebuggerHidden]
    method SetException (line 176) | [DebuggerHidden]
    method SetResult (line 191) | [DebuggerHidden]
    method AwaitOnCompleted (line 206) | [DebuggerHidden]
    method AwaitUnsafeOnCompleted (line 221) | [DebuggerHidden]
    method Start (line 237) | [DebuggerHidden]
    method SetStateMachine (line 246) | [DebuggerHidden]

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncUniTaskVoidMethodBuilder.cs
  type AsyncUniTaskVoidMethodBuilder (line 12) | [StructLayout(LayoutKind.Auto)]
    method Create (line 18) | [DebuggerHidden]
    method SetException (line 37) | [DebuggerHidden]
    method SetResult (line 57) | [DebuggerHidden]
    method AwaitOnCompleted (line 75) | [DebuggerHidden]
    method AwaitUnsafeOnCompleted (line 90) | [DebuggerHidden]
    method Start (line 106) | [DebuggerHidden]
    method SetStateMachine (line 114) | [DebuggerHidden]

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/StateMachineRunner.cs
  type IStateMachineRunner (line 15) | internal interface IStateMachineRunner
    method Return (line 18) | void Return();
  type IStateMachineRunnerPromise (line 25) | internal interface IStateMachineRunnerPromise : IUniTaskSource
    method SetResult (line 29) | void SetResult();
    method SetException (line 30) | void SetException(Exception exception);
    method SetResult (line 37) | void SetResult(T result);
    method SetException (line 38) | void SetException(Exception exception);
  type IStateMachineRunnerPromise (line 33) | internal interface IStateMachineRunnerPromise<T> : IUniTaskSource<T>
    method SetResult (line 29) | void SetResult();
    method SetException (line 30) | void SetException(Exception exception);
    method SetResult (line 37) | void SetResult(T result);
    method SetException (line 38) | void SetException(Exception exception);
  class StateMachineUtility (line 41) | internal static class StateMachineUtility
    method GetState (line 44) | public static int GetState(IAsyncStateMachine stateMachine)
  class AsyncUniTaskVoid (line 52) | internal sealed class AsyncUniTaskVoid<TStateMachine> : IStateMachineRun...
    method AsyncUniTaskVoid (line 65) | public AsyncUniTaskVoid()
    method SetStateMachine (line 73) | public static void SetStateMachine(ref TStateMachine stateMachine, ref...
    method AsyncUniTaskVoid (line 85) | static AsyncUniTaskVoid()
    method Return (line 93) | public void Return()
    method Run (line 100) | [DebuggerHidden]
    method GetStatus (line 109) | UniTaskStatus IUniTaskSource.GetStatus(short token)
    method UnsafeGetStatus (line 114) | UniTaskStatus IUniTaskSource.UnsafeGetStatus()
    method OnCompleted (line 119) | void IUniTaskSource.OnCompleted(Action<object> continuation, object st...
    method GetResult (line 123) | void IUniTaskSource.GetResult(short token)
  class AsyncUniTask (line 128) | internal sealed class AsyncUniTask<TStateMachine> : IStateMachineRunnerP...
    method AsyncUniTask (line 141) | AsyncUniTask()
    method SetStateMachine (line 149) | public static void SetStateMachine(ref TStateMachine stateMachine, ref...
    method AsyncUniTask (line 164) | static AsyncUniTask()
    method Return (line 169) | void Return()
    method TryReturn (line 177) | bool TryReturn()
    method Run (line 185) | [DebuggerHidden]
    method SetResult (line 201) | [DebuggerHidden]
    method SetException (line 207) | [DebuggerHidden]
    method GetResult (line 213) | [DebuggerHidden]
    method GetStatus (line 231) | [DebuggerHidden]
    method UnsafeGetStatus (line 237) | [DebuggerHidden]
    method OnCompleted (line 243) | [DebuggerHidden]
    method AsyncUniTask (line 264) | AsyncUniTask()
    method SetStateMachine (line 272) | public static void SetStateMachine(ref TStateMachine stateMachine, ref...
    method AsyncUniTask (line 287) | static AsyncUniTask()
    method Return (line 292) | void Return()
    method TryReturn (line 300) | bool TryReturn()
    method Run (line 308) | [DebuggerHidden]
    method SetResult (line 325) | [DebuggerHidden]
    method SetException (line 331) | [DebuggerHidden]
    method GetResult (line 337) | [DebuggerHidden]
    method GetResult (line 355) | [DebuggerHidden]
    method GetStatus (line 361) | [DebuggerHidden]
    method UnsafeGetStatus (line 367) | [DebuggerHidden]
    method OnCompleted (line 373) | [DebuggerHidden]
  class AsyncUniTask (line 250) | internal sealed class AsyncUniTask<TStateMachine, T> : IStateMachineRunn...
    method AsyncUniTask (line 141) | AsyncUniTask()
    method SetStateMachine (line 149) | public static void SetStateMachine(ref TStateMachine stateMachine, ref...
    method AsyncUniTask (line 164) | static AsyncUniTask()
    method Return (line 169) | void Return()
    method TryReturn (line 177) | bool TryReturn()
    method Run (line 185) | [DebuggerHidden]
    method SetResult (line 201) | [DebuggerHidden]
    method SetException (line 207) | [DebuggerHidden]
    method GetResult (line 213) | [DebuggerHidden]
    method GetStatus (line 231) | [DebuggerHidden]
    method UnsafeGetStatus (line 237) | [DebuggerHidden]
    method OnCompleted (line 243) | [DebuggerHidden]
    method AsyncUniTask (line 264) | AsyncUniTask()
    method SetStateMachine (line 272) | public static void SetStateMachine(ref TStateMachine stateMachine, ref...
    method AsyncUniTask (line 287) | static AsyncUniTask()
    method Return (line 292) | void Return()
    method TryReturn (line 300) | bool TryReturn()
    method Run (line 308) | [DebuggerHidden]
    method SetResult (line 325) | [DebuggerHidden]
    method SetException (line 331) | [DebuggerHidden]
    method GetResult (line 337) | [DebuggerHidden]
    method GetResult (line 355) | [DebuggerHidden]
    method GetStatus (line 361) | [DebuggerHidden]
    method UnsafeGetStatus (line 367) | [DebuggerHidden]
    method OnCompleted (line 373) | [DebuggerHidden]

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/EnumerableAsyncExtensions.cs
  class EnumerableAsyncExtensions (line 8) | public static class EnumerableAsyncExtensions
    method Select (line 12) | public static IEnumerable<UniTask> Select<T>(this IEnumerable<T> sourc...
    method Select (line 17) | public static IEnumerable<UniTask<TR>> Select<T, TR>(this IEnumerable<...
    method Select (line 22) | public static IEnumerable<UniTask> Select<T>(this IEnumerable<T> sourc...
    method Select (line 27) | public static IEnumerable<UniTask<TR>> Select<T, TR>(this IEnumerable<...

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/EnumeratorAsyncExtensions.cs
  class EnumeratorAsyncExtensions (line 13) | public static class EnumeratorAsyncExtensions
    method GetAwaiter (line 15) | public static UniTask.Awaiter GetAwaiter<T>(this T enumerator)
    method WithCancellation (line 23) | public static UniTask WithCancellation(this IEnumerator enumerator, Ca...
    method ToUniTask (line 29) | public static UniTask ToUniTask(this IEnumerator enumerator, PlayerLoo...
    method ToUniTask (line 35) | public static UniTask ToUniTask(this IEnumerator enumerator, MonoBehav...
    method Core (line 42) | static IEnumerator Core(IEnumerator inner, MonoBehaviour coroutineRunn...
    class EnumeratorPromise (line 48) | sealed class EnumeratorPromise : IUniTaskSource, IPlayerLoopItem, ITas...
      method EnumeratorPromise (line 54) | static EnumeratorPromise()
      method EnumeratorPromise (line 67) | EnumeratorPromise()
      method Create (line 71) | public static IUniTaskSource Create(IEnumerator innerEnumerator, Pla...
      method GetResult (line 101) | public void GetResult(short token)
      method GetStatus (line 117) | public UniTaskStatus GetStatus(short token)
      method UnsafeGetStatus (line 122) | public UniTaskStatus UnsafeGetStatus()
      method OnCompleted (line 127) | public void OnCompleted(Action<object> continuation, object state, s...
      method MoveNext (line 132) | public bool MoveNext()
      method TryReturn (line 185) | bool TryReturn()
      method ConsumeEnumerator (line 197) | static IEnumerator ConsumeEnumerator(IEnumerator enumerator)
      method UnwrapWaitForSeconds (line 262) | static IEnumerator UnwrapWaitForSeconds(WaitForSeconds waitForSeconds)
      method UnwrapWaitAsyncOperation (line 278) | static IEnumerator UnwrapWaitAsyncOperation(AsyncOperation asyncOper...

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/ExceptionExtensions.cs
  class ExceptionExtensions (line 6) | public static class ExceptionExtensions
    method IsOperationCanceledException (line 8) | public static bool IsOperationCanceledException(this Exception exception)

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/AddressablesAsyncExtensions.cs
  class AddressablesAsyncExtensions (line 15) | public static class AddressablesAsyncExtensions
    method GetAwaiter (line 19) | public static UniTask.Awaiter GetAwaiter(this AsyncOperationHandle han...
    method WithCancellation (line 24) | public static UniTask WithCancellation(this AsyncOperationHandle handl...
    method ToUniTask (line 29) | public static UniTask ToUniTask(this AsyncOperationHandle handle, IPro...
    type AsyncOperationHandleAwaiter (line 51) | public struct AsyncOperationHandleAwaiter : ICriticalNotifyCompletion
      method AsyncOperationHandleAwaiter (line 56) | public AsyncOperationHandleAwaiter(AsyncOperationHandle handle)
      method GetResult (line 64) | public void GetResult()
      method OnCompleted (line 83) | public void OnCompleted(Action continuation)
      method UnsafeOnCompleted (line 88) | public void UnsafeOnCompleted(Action continuation)
    class AsyncOperationHandleConfiguredSource (line 96) | sealed class AsyncOperationHandleConfiguredSource : IUniTaskSource, IP...
      method AsyncOperationHandleConfiguredSource (line 102) | static AsyncOperationHandleConfiguredSource()
      method AsyncOperationHandleConfiguredSource (line 118) | AsyncOperationHandleConfiguredSource()
      method Create (line 123) | public static IUniTaskSource Create(AsyncOperationHandle handle, Pla...
      method HandleCompleted (line 165) | void HandleCompleted(AsyncOperationHandle _)
      method GetResult (line 196) | public void GetResult(short token)
      method GetStatus (line 215) | public UniTaskStatus GetStatus(short token)
      method UnsafeGetStatus (line 220) | public UniTaskStatus UnsafeGetStatus()
      method OnCompleted (line 225) | public void OnCompleted(Action<object> continuation, object state, s...
      method MoveNext (line 230) | public bool MoveNext()
      method TryReturn (line 256) | bool TryReturn()
      method AsyncOperationHandleConfiguredSource (line 309) | static AsyncOperationHandleConfiguredSource()
      method AsyncOperationHandleConfiguredSource (line 325) | AsyncOperationHandleConfiguredSource()
      method Create (line 330) | public static IUniTaskSource<T> Create(AsyncOperationHandle<T> handl...
      method HandleCompleted (line 372) | void HandleCompleted(AsyncOperationHandle<T> argHandle)
      method GetResult (line 402) | public T GetResult(short token)
      method GetResult (line 421) | void IUniTaskSource.GetResult(short token)
      method GetStatus (line 426) | public UniTaskStatus GetStatus(short token)
      method UnsafeGetStatus (line 431) | public UniTaskStatus UnsafeGetStatus()
      method OnCompleted (line 436) | public void OnCompleted(Action<object> continuation, object state, s...
      method MoveNext (line 441) | public bool MoveNext()
      method TryReturn (line 467) | bool TryReturn()
    method GetAwaiter (line 272) | public static UniTask<T>.Awaiter GetAwaiter<T>(this AsyncOperationHand...
    method WithCancellation (line 277) | public static UniTask<T> WithCancellation<T>(this AsyncOperationHandle...
    method ToUniTask (line 282) | public static UniTask<T> ToUniTask<T>(this AsyncOperationHandle<T> han...
    class AsyncOperationHandleConfiguredSource (line 303) | sealed class AsyncOperationHandleConfiguredSource<T> : IUniTaskSource<...
      method AsyncOperationHandleConfiguredSource (line 102) | static AsyncOperationHandleConfiguredSource()
      method AsyncOperationHandleConfiguredSource (line 118) | AsyncOperationHandleConfiguredSource()
      method Create (line 123) | public static IUniTaskSource Create(AsyncOperationHandle handle, Pla...
      method HandleCompleted (line 165) | void HandleCompleted(AsyncOperationHandle _)
      method GetResult (line 196) | public void GetResult(short token)
      method GetStatus (line 215) | public UniTaskStatus GetStatus(short token)
      method UnsafeGetStatus (line 220) | public UniTaskStatus UnsafeGetStatus()
      method OnCompleted (line 225) | public void OnCompleted(Action<object> continuation, object state, s...
      method MoveNext (line 230) | public bool MoveNext()
      method TryReturn (line 256) | bool TryReturn()
      method AsyncOperationHandleConfiguredSource (line 309) | static AsyncOperationHandleConfiguredSource()
      method AsyncOperationHandleConfiguredSource (line 325) | AsyncOperationHandleConfiguredSource()
      method Create (line 330) | public static IUniTaskSource<T> Create(AsyncOperationHandle<T> handl...
      method HandleCompleted (line 372) | void HandleCompleted(AsyncOperationHandle<T> argHandle)
      method GetResult (line 402) | public T GetResult(short token)
      method GetResult (line 421) | void IUniTaskSource.GetResult(short token)
      method GetStatus (line 426) | public UniTaskStatus GetStatus(short token)
      method UnsafeGetStatus (line 431) | public UniTaskStatus UnsafeGetStatus()
      method OnCompleted (line 436) | public void OnCompleted(Action<object> continuation, object state, s...
      method MoveNext (line 441) | public bool MoveNext()
      method TryReturn (line 467) | bool TryReturn()

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/DOTweenAsyncExtensions.cs
  type TweenCancelBehaviour (line 14) | public enum TweenCancelBehaviour
  class DOTweenAsyncExtensions (line 29) | public static class DOTweenAsyncExtensions
    type CallbackType (line 31) | enum CallbackType
    method GetAwaiter (line 41) | public static TweenAwaiter GetAwaiter(this Tween tween)
    method WithCancellation (line 46) | public static UniTask WithCancellation(this Tween tween, CancellationT...
    method ToUniTask (line 54) | public static UniTask ToUniTask(this Tween tween, TweenCancelBehaviour...
    method AwaitForComplete (line 62) | public static UniTask AwaitForComplete(this Tween tween, TweenCancelBe...
    method AwaitForPause (line 70) | public static UniTask AwaitForPause(this Tween tween, TweenCancelBehav...
    method AwaitForPlay (line 78) | public static UniTask AwaitForPlay(this Tween tween, TweenCancelBehavi...
    method AwaitForRewind (line 86) | public static UniTask AwaitForRewind(this Tween tween, TweenCancelBeha...
    method AwaitForStepComplete (line 94) | public static UniTask AwaitForStepComplete(this Tween tween, TweenCanc...
    type TweenAwaiter (line 102) | public struct TweenAwaiter : ICriticalNotifyCompletion
      method TweenAwaiter (line 109) | public TweenAwaiter(Tween tween)
      method GetAwaiter (line 114) | public TweenAwaiter GetAwaiter()
      method GetResult (line 119) | public void GetResult()
      method OnCompleted (line 123) | public void OnCompleted(System.Action continuation)
      method UnsafeOnCompleted (line 128) | public void UnsafeOnCompleted(System.Action continuation)
    class TweenConfiguredSource (line 135) | sealed class TweenConfiguredSource : IUniTaskSource, ITaskPoolNode<Twe...
      method TweenConfiguredSource (line 141) | static TweenConfiguredSource()
      method TweenConfiguredSource (line 158) | TweenConfiguredSource()
      method Create (line 163) | public static IUniTaskSource Create(Tween tween, TweenCancelBehaviou...
      method OnCompleteCallbackDelegate (line 267) | void OnCompleteCallbackDelegate()
      method DoCancelBeforeCreate (line 291) | static void DoCancelBeforeCreate(Tween tween, TweenCancelBehaviour t...
      method GetResult (line 326) | public void GetResult(short token)
      method GetStatus (line 338) | public UniTaskStatus GetStatus(short token)
      method UnsafeGetStatus (line 343) | public UniTaskStatus UnsafeGetStatus()
      method OnCompleted (line 348) | public void OnCompleted(Action<object> continuation, object state, s...
      method TryReturn (line 353) | bool TryReturn()
      method RestoreOriginalCallback (line 367) | void RestoreOriginalCallback()
  class PooledTweenCallback (line 396) | sealed class PooledTweenCallback
    method PooledTweenCallback (line 405) | PooledTweenCallback()
    method Create (line 410) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Run (line 422) | [MethodImpl(MethodImplOptions.AggressiveInlining)]

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/TextMeshProAsyncExtensions.InputField.cs
  class TextMeshProAsyncExtensions (line 9) | public static partial class TextMeshProAsyncExtensions
    method GetAsyncValueChangedEventHandler (line 11) | public static IAsyncValueChangedEventHandler<string> GetAsyncValueChan...
    method GetAsyncValueChangedEventHandler (line 16) | public static IAsyncValueChangedEventHandler<string> GetAsyncValueChan...
    method OnValueChangedAsync (line 21) | public static UniTask<string> OnValueChangedAsync(this TMP_InputField ...
    method OnValueChangedAsync (line 26) | public static UniTask<string> OnValueChangedAsync(this TMP_InputField ...
    method OnValueChangedAsAsyncEnumerable (line 31) | public static IUniTaskAsyncEnumerable<string> OnValueChangedAsAsyncEnu...
    method OnValueChangedAsAsyncEnumerable (line 36) | public static IUniTaskAsyncEnumerable<string> OnValueChangedAsAsyncEnu...
    method GetAsyncEndEditEventHandler (line 41) | public static IAsyncEndEditEventHandler<string> GetAsyncEndEditEventHa...
    method GetAsyncEndEditEventHandler (line 46) | public static IAsyncEndEditEventHandler<string> GetAsyncEndEditEventHa...
    method OnEndEditAsync (line 51) | public static UniTask<string> OnEndEditAsync(this TMP_InputField input...
    method OnEndEditAsync (line 56) | public static UniTask<string> OnEndEditAsync(this TMP_InputField input...
    method OnEndEditAsAsyncEnumerable (line 61) | public static IUniTaskAsyncEnumerable<string> OnEndEditAsAsyncEnumerab...
    method OnEndEditAsAsyncEnumerable (line 66) | public static IUniTaskAsyncEnumerable<string> OnEndEditAsAsyncEnumerab...
    method GetAsyncEndTextSelectionEventHandler (line 71) | public static IAsyncEndTextSelectionEventHandler<(string, int, int)> G...
    method GetAsyncEndTextSelectionEventHandler (line 76) | public static IAsyncEndTextSelectionEventHandler<(string, int, int)> G...
    method OnEndTextSelectionAsync (line 81) | public static UniTask<(string, int, int)> OnEndTextSelectionAsync(this...
    method OnEndTextSelectionAsync (line 86) | public static UniTask<(string, int, int)> OnEndTextSelectionAsync(this...
    method OnEndTextSelectionAsAsyncEnumerable (line 91) | public static IUniTaskAsyncEnumerable<(string, int, int)> OnEndTextSel...
    method OnEndTextSelectionAsAsyncEnumerable (line 96) | public static IUniTaskAsyncEnumerable<(string, int, int)> OnEndTextSel...
    method GetAsyncTextSelectionEventHandler (line 101) | public static IAsyncTextSelectionEventHandler<(string, int, int)> GetA...
    method GetAsyncTextSelectionEventHandler (line 106) | public static IAsyncTextSelectionEventHandler<(string, int, int)> GetA...
    method OnTextSelectionAsync (line 111) | public static UniTask<(string, int, int)> OnTextSelectionAsync(this TM...
    method OnTextSelectionAsync (line 116) | public static UniTask<(string, int, int)> OnTextSelectionAsync(this TM...
    method OnTextSelectionAsAsyncEnumerable (line 121) | public static IUniTaskAsyncEnumerable<(string, int, int)> OnTextSelect...
    method OnTextSelectionAsAsyncEnumerable (line 126) | public static IUniTaskAsyncEnumerable<(string, int, int)> OnTextSelect...
    method GetAsyncDeselectEventHandler (line 131) | public static IAsyncDeselectEventHandler<string> GetAsyncDeselectEvent...
    method GetAsyncDeselectEventHandler (line 136) | public static IAsyncDeselectEventHandler<string> GetAsyncDeselectEvent...
    method OnDeselectAsync (line 141) | public static UniTask<string> OnDeselectAsync(this TMP_InputField inpu...
    method OnDeselectAsync (line 146) | public static UniTask<string> OnDeselectAsync(this TMP_InputField inpu...
    method OnDeselectAsAsyncEnumerable (line 151) | public static IUniTaskAsyncEnumerable<string> OnDeselectAsAsyncEnumera...
    method OnDeselectAsAsyncEnumerable (line 156) | public static IUniTaskAsyncEnumerable<string> OnDeselectAsAsyncEnumera...
    method GetAsyncSelectEventHandler (line 161) | public static IAsyncSelectEventHandler<string> GetAsyncSelectEventHand...
    method GetAsyncSelectEventHandler (line 166) | public static IAsyncSelectEventHandler<string> GetAsyncSelectEventHand...
    method OnSelectAsync (line 171) | public static UniTask<string> OnSelectAsync(this TMP_InputField inputF...
    method OnSelectAsync (line 176) | public static UniTask<string> OnSelectAsync(this TMP_InputField inputF...
    method OnSelectAsAsyncEnumerable (line 181) | public static IUniTaskAsyncEnumerable<string> OnSelectAsAsyncEnumerabl...
    method OnSelectAsAsyncEnumerable (line 186) | public static IUniTaskAsyncEnumerable<string> OnSelectAsAsyncEnumerabl...
    method GetAsyncSubmitEventHandler (line 191) | public static IAsyncSubmitEventHandler<string> GetAsyncSubmitEventHand...
    method GetAsyncSubmitEventHandler (line 196) | public static IAsyncSubmitEventHandler<string> GetAsyncSubmitEventHand...
    method OnSubmitAsync (line 201) | public static UniTask<string> OnSubmitAsync(this TMP_InputField inputF...
    method OnSubmitAsync (line 206) | public static UniTask<string> OnSubmitAsync(this TMP_InputField inputF...
    method OnSubmitAsAsyncEnumerable (line 211) | public static IUniTaskAsyncEnumerable<string> OnSubmitAsAsyncEnumerabl...
    method OnSubmitAsAsyncEnumerable (line 216) | public static IUniTaskAsyncEnumerable<string> OnSubmitAsAsyncEnumerabl...

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/TextMeshProAsyncExtensions.cs
  class TextMeshProAsyncExtensions (line 10) | public static partial class TextMeshProAsyncExtensions
    method BindTo (line 13) | public static void BindTo(this IUniTaskAsyncEnumerable<string> source,...
    method BindTo (line 18) | public static void BindTo(this IUniTaskAsyncEnumerable<string> source,...
    method BindToCore (line 23) | static async UniTaskVoid BindToCore(IUniTaskAsyncEnumerable<string> so...
    method BindTo (line 69) | public static void BindTo<T>(this IUniTaskAsyncEnumerable<T> source, T...
    method BindTo (line 74) | public static void BindTo<T>(this IUniTaskAsyncEnumerable<T> source, T...
    method BindTo (line 79) | public static void BindTo<T>(this AsyncReactiveProperty<T> source, TMP...
    method BindToCore (line 84) | static async UniTaskVoid BindToCore<T>(IUniTaskAsyncEnumerable<T> sour...

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/IUniTaskAsyncEnumerable.cs
  type IUniTaskAsyncEnumerable (line 8) | public interface IUniTaskAsyncEnumerable<out T>
    method GetAsyncEnumerator (line 10) | IUniTaskAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken cancel...
  type IUniTaskAsyncEnumerator (line 13) | public interface IUniTaskAsyncEnumerator<out T> : IUniTaskAsyncDisposable
    method MoveNextAsync (line 16) | UniTask<bool> MoveNextAsync();
  type IUniTaskAsyncDisposable (line 19) | public interface IUniTaskAsyncDisposable
    method DisposeAsync (line 21) | UniTask DisposeAsync();
  type IUniTaskOrderedAsyncEnumerable (line 24) | public interface IUniTaskOrderedAsyncEnumerable<TElement> : IUniTaskAsyn...
    method CreateOrderedEnumerable (line 26) | IUniTaskOrderedAsyncEnumerable<TElement> CreateOrderedEnumerable<TKey>...
    method CreateOrderedEnumerable (line 27) | IUniTaskOrderedAsyncEnumerable<TElement> CreateOrderedEnumerable<TKey>...
    method CreateOrderedEnumerable (line 28) | IUniTaskOrderedAsyncEnumerable<TElement> CreateOrderedEnumerable<TKey>...
  type IConnectableUniTaskAsyncEnumerable (line 31) | public interface IConnectableUniTaskAsyncEnumerable<out T> : IUniTaskAsy...
    method Connect (line 33) | IDisposable Connect();
  class UniTaskAsyncEnumerableExtensions (line 42) | public static class UniTaskAsyncEnumerableExtensions
    method WithCancellation (line 44) | public static UniTaskCancelableAsyncEnumerable<T> WithCancellation<T>(...
  type UniTaskCancelableAsyncEnumerable (line 50) | [StructLayout(LayoutKind.Auto)]
    method UniTaskCancelableAsyncEnumerable (line 56) | internal UniTaskCancelableAsyncEnumerable(IUniTaskAsyncEnumerable<T> e...
    method GetAsyncEnumerator (line 62) | public Enumerator GetAsyncEnumerator()
    type Enumerator (line 67) | [StructLayout(LayoutKind.Auto)]
      method Enumerator (line 72) | internal Enumerator(IUniTaskAsyncEnumerator<T> enumerator)
      method MoveNextAsync (line 79) | public UniTask<bool> MoveNextAsync()
      method DisposeAsync (line 85) | public UniTask DisposeAsync()

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/IUniTaskSource.cs
  type UniTaskStatus (line 13) | public enum UniTaskStatus
  type IUniTaskSource (line 26) | public interface IUniTaskSource
    method GetStatus (line 31) | UniTaskStatus GetStatus(short token);
    method OnCompleted (line 32) | void OnCompleted(Action<object> continuation, object state, short token);
    method GetResult (line 33) | void GetResult(short token);
    method UnsafeGetStatus (line 35) | UniTaskStatus UnsafeGetStatus();
    method GetStatus (line 39) | System.Threading.Tasks.Sources.ValueTaskSourceStatus System.Threading....
    method GetResult (line 44) | void System.Threading.Tasks.Sources.IValueTaskSource.GetResult(short t...
    method OnCompleted (line 49) | void System.Threading.Tasks.Sources.IValueTaskSource.OnCompleted(Actio...
    method GetResult (line 63) | new T GetResult(short token);
    method GetStatus (line 67) | new public UniTaskStatus GetStatus(short token)
    method OnCompleted (line 72) | new public void OnCompleted(Action<object> continuation, object state,...
    method GetStatus (line 77) | System.Threading.Tasks.Sources.ValueTaskSourceStatus System.Threading....
    method GetResult (line 82) | T System.Threading.Tasks.Sources.IValueTaskSource<T>.GetResult(short t...
    method OnCompleted (line 87) | void System.Threading.Tasks.Sources.IValueTaskSource<T>.OnCompleted(Ac...
  type IUniTaskSource (line 58) | public interface IUniTaskSource<out T> : IUniTaskSource
    method GetStatus (line 31) | UniTaskStatus GetStatus(short token);
    method OnCompleted (line 32) | void OnCompleted(Action<object> continuation, object state, short token);
    method GetResult (line 33) | void GetResult(short token);
    method UnsafeGetStatus (line 35) | UniTaskStatus UnsafeGetStatus();
    method GetStatus (line 39) | System.Threading.Tasks.Sources.ValueTaskSourceStatus System.Threading....
    method GetResult (line 44) | void System.Threading.Tasks.Sources.IValueTaskSource.GetResult(short t...
    method OnCompleted (line 49) | void System.Threading.Tasks.Sources.IValueTaskSource.OnCompleted(Actio...
    method GetResult (line 63) | new T GetResult(short token);
    method GetStatus (line 67) | new public UniTaskStatus GetStatus(short token)
    method OnCompleted (line 72) | new public void OnCompleted(Action<object> continuation, object state,...
    method GetStatus (line 77) | System.Threading.Tasks.Sources.ValueTaskSourceStatus System.Threading....
    method GetResult (line 82) | T System.Threading.Tasks.Sources.IValueTaskSource<T>.GetResult(short t...
    method OnCompleted (line 87) | void System.Threading.Tasks.Sources.IValueTaskSource<T>.OnCompleted(Ac...
  class UniTaskStatusExtensions (line 96) | public static class UniTaskStatusExtensions
    method IsCompleted (line 99) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method IsCompletedSuccessfully (line 106) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method IsCanceled (line 113) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method IsFaulted (line 120) | [MethodImpl(MethodImplOptions.AggressiveInlining)]

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ArrayPool.cs
  class ArrayPool (line 10) | internal sealed class ArrayPool<T>
    method ArrayPool (line 22) | ArrayPool()
    method Rent (line 34) | public T[] Rent(int minimumLength)
    method Return (line 69) | public void Return(T[] array, bool clearArray = false)
    method CalculateSize (line 105) | static int CalculateSize(int size)
    method GetQueueIndex (line 123) | static int GetQueueIndex(int size)

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ArrayPoolUtil.cs
  class ArrayPoolUtil (line 9) | internal static class ArrayPoolUtil
    method EnsureCapacity (line 11) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method EnsureCapacityCore (line 20) | [MethodImpl(MethodImplOptions.NoInlining)]
    method Materialize (line 35) | public static RentArray<T> Materialize<T>(IEnumerable<T> source)
    type RentArray (line 81) | public struct RentArray<T> : IDisposable
      method RentArray (line 87) | public RentArray(T[] array, int length, ArrayPool<T> pool)
      method Dispose (line 94) | public void Dispose()
      method DisposeManually (line 99) | public void DisposeManually(bool clearArray)

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ArrayUtil.cs
  class ArrayUtil (line 9) | internal static class ArrayUtil
    method EnsureCapacity (line 11) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method EnsureCore (line 21) | [MethodImpl(MethodImplOptions.NoInlining)]
    method Materialize (line 34) | public static (T[] array, int length) Materialize<T>(IEnumerable<T> so...

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ContinuationQueue.cs
  class ContinuationQueue (line 8) | internal sealed class ContinuationQueue
    method ContinuationQueue (line 24) | public ContinuationQueue(PlayerLoopTiming timing)
    method Enqueue (line 29) | public void Enqueue(Action continuation)
    method Clear (line 73) | public int Clear()
    method Run (line 87) | public void Run()
    method Initialization (line 151) | void Initialization() => RunCore();
    method LastInitialization (line 152) | void LastInitialization() => RunCore();
    method EarlyUpdate (line 153) | void EarlyUpdate() => RunCore();
    method LastEarlyUpdate (line 154) | void LastEarlyUpdate() => RunCore();
    method FixedUpdate (line 155) | void FixedUpdate() => RunCore();
    method LastFixedUpdate (line 156) | void LastFixedUpdate() => RunCore();
    method PreUpdate (line 157) | void PreUpdate() => RunCore();
    method LastPreUpdate (line 158) | void LastPreUpdate() => RunCore();
    method Update (line 159) | void Update() => RunCore();
    method LastUpdate (line 160) | void LastUpdate() => RunCore();
    method PreLateUpdate (line 161) | void PreLateUpdate() => RunCore();
    method LastPreLateUpdate (line 162) | void LastPreLateUpdate() => RunCore();
    method PostLateUpdate (line 163) | void PostLateUpdate() => RunCore();
    method LastPostLateUpdate (line 164) | void LastPostLateUpdate() => RunCore();
    method TimeUpdate (line 166) | void TimeUpdate() => RunCore();
    method LastTimeUpdate (line 167) | void LastTimeUpdate() => RunCore();
    method RunCore (line 170) | [System.Diagnostics.DebuggerHidden]

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/DiagnosticsExtensions.cs
  class DiagnosticsExtensions (line 19) | internal static class DiagnosticsExtensions
    method CleanupAsyncStackTrace (line 48) | public static string CleanupAsyncStackTrace(this StackTrace stackTrace)
    method IsAsync (line 126) | static bool IsAsync(MethodBase methodInfo)
    method TryResolveStateMachineMethod (line 133) | static bool TryResolveStateMachineMethod(ref MethodBase method, out Ty...
    method BeautifyType (line 173) | static string BeautifyType(Type t, bool shortName)
    method IgnoreLine (line 198) | static bool IgnoreLine(MethodBase methodInfo)
    method AppendHyperLink (line 233) | static string AppendHyperLink(string path, string line)

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/Error.cs
  class Error (line 8) | internal static class Error
    method ThrowArgumentNullException (line 10) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method ThrowArgumentNullExceptionCore (line 17) | [MethodImpl(MethodImplOptions.NoInlining)]
    method ArgumentOutOfRange (line 23) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method NoElements (line 29) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method MoreThanOneElement (line 35) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method ThrowArgumentException (line 41) | [MethodImpl(MethodImplOptions.NoInlining)]
    method ThrowNotYetCompleted (line 47) | [MethodImpl(MethodImplOptions.NoInlining)]
    method ThrowNotYetCompleted (line 53) | [MethodImpl(MethodImplOptions.NoInlining)]
    method ThrowWhenContinuationIsAlreadyRegistered (line 59) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method ThrowInvalidOperationExceptionCore (line 66) | [MethodImpl(MethodImplOptions.NoInlining)]
    method ThrowOperationCanceledException (line 72) | [MethodImpl(MethodImplOptions.NoInlining)]

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/MinimumQueue.cs
  class MinimumQueue (line 9) | internal class MinimumQueue<T>
    method MinimumQueue (line 19) | public MinimumQueue(int capacity)
    method Peek (line 32) | public T Peek()
    method Enqueue (line 38) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Dequeue (line 51) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Grow (line 65) | void Grow()
    method SetCapacity (line 75) | void SetCapacity(int capacity)
    method MoveNext (line 96) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method ThrowForEmptyQueue (line 107) | void ThrowForEmptyQueue()

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/PlayerLoopRunner.cs
  class PlayerLoopRunner (line 7) | internal sealed class PlayerLoopRunner
    method PlayerLoopRunner (line 23) | public PlayerLoopRunner(PlayerLoopTiming timing)
    method AddAction (line 29) | public void AddAction(IPlayerLoopItem item)
    method Clear (line 51) | public int Clear()
    method Run (line 73) | public void Run()
    method Initialization (line 137) | void Initialization() => RunCore();
    method LastInitialization (line 138) | void LastInitialization() => RunCore();
    method EarlyUpdate (line 139) | void EarlyUpdate() => RunCore();
    method LastEarlyUpdate (line 140) | void LastEarlyUpdate() => RunCore();
    method FixedUpdate (line 141) | void FixedUpdate() => RunCore();
    method LastFixedUpdate (line 142) | void LastFixedUpdate() => RunCore();
    method PreUpdate (line 143) | void PreUpdate() => RunCore();
    method LastPreUpdate (line 144) | void LastPreUpdate() => RunCore();
    method Update (line 145) | void Update() => RunCore();
    method LastUpdate (line 146) | void LastUpdate() => RunCore();
    method PreLateUpdate (line 147) | void PreLateUpdate() => RunCore();
    method LastPreLateUpdate (line 148) | void LastPreLateUpdate() => RunCore();
    method PostLateUpdate (line 149) | void PostLateUpdate() => RunCore();
    method LastPostLateUpdate (line 150) | void LastPostLateUpdate() => RunCore();
    method TimeUpdate (line 152) | void TimeUpdate() => RunCore();
    method LastTimeUpdate (line 153) | void LastTimeUpdate() => RunCore();
    method RunCore (line 156) | [System.Diagnostics.DebuggerHidden]

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/PooledDelegate.cs
  class PooledDelegate (line 6) | internal sealed class PooledDelegate<T> : ITaskPoolNode<PooledDelegate<T>>
    method PooledDelegate (line 13) | static PooledDelegate()
    method PooledDelegate (line 21) | PooledDelegate()
    method Create (line 26) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Run (line 38) | [MethodImpl(MethodImplOptions.AggressiveInlining)]

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/RuntimeHelpersAbstraction.cs
  class RuntimeHelpersAbstraction (line 10) | internal static class RuntimeHelpersAbstraction
    method IsWellKnownNoReferenceContainsType (line 13) | public static bool IsWellKnownNoReferenceContainsType<T>()
    method WellKnownNoReferenceContainsTypeInitialize (line 18) | static bool WellKnownNoReferenceContainsTypeInitialize(Type t)
    class WellKnownNoReferenceContainsType (line 53) | static class WellKnownNoReferenceContainsType<T>
      method WellKnownNoReferenceContainsType (line 57) | static WellKnownNoReferenceContainsType()

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/StatePool.cs
  class StateTuple (line 7) | internal static class StateTuple
    method Create (line 9) | public static StateTuple<T1> Create<T1>(T1 item1)
    method Create (line 14) | public static StateTuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2)
    method Create (line 19) | public static StateTuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 i...
    method Deconstruct (line 29) | public void Deconstruct(out T1 item1)
    method Dispose (line 34) | public void Dispose()
    method Deconstruct (line 69) | public void Deconstruct(out T1 item1, out T2 item2)
    method Dispose (line 75) | public void Dispose()
    method Deconstruct (line 113) | public void Deconstruct(out T1 item1, out T2 item2, out T3 item3)
    method Dispose (line 120) | public void Dispose()
  class StateTuple (line 25) | internal class StateTuple<T1> : IDisposable
    method Create (line 9) | public static StateTuple<T1> Create<T1>(T1 item1)
    method Create (line 14) | public static StateTuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2)
    method Create (line 19) | public static StateTuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 i...
    method Deconstruct (line 29) | public void Deconstruct(out T1 item1)
    method Dispose (line 34) | public void Dispose()
    method Deconstruct (line 69) | public void Deconstruct(out T1 item1, out T2 item2)
    method Dispose (line 75) | public void Dispose()
    method Deconstruct (line 113) | public void Deconstruct(out T1 item1, out T2 item2, out T3 item3)
    method Dispose (line 120) | public void Dispose()
  class StatePool (line 40) | internal static class StatePool<T1>
    method Create (line 44) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Return (line 56) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Create (line 85) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Return (line 98) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Create (line 130) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Return (line 144) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
  class StateTuple (line 64) | internal class StateTuple<T1, T2> : IDisposable
    method Create (line 9) | public static StateTuple<T1> Create<T1>(T1 item1)
    method Create (line 14) | public static StateTuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2)
    method Create (line 19) | public static StateTuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 i...
    method Deconstruct (line 29) | public void Deconstruct(out T1 item1)
    method Dispose (line 34) | public void Dispose()
    method Deconstruct (line 69) | public void Deconstruct(out T1 item1, out T2 item2)
    method Dispose (line 75) | public void Dispose()
    method Deconstruct (line 113) | public void Deconstruct(out T1 item1, out T2 item2, out T3 item3)
    method Dispose (line 120) | public void Dispose()
  class StatePool (line 81) | internal static class StatePool<T1, T2>
    method Create (line 44) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Return (line 56) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Create (line 85) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Return (line 98) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Create (line 130) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Return (line 144) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
  class StateTuple (line 107) | internal class StateTuple<T1, T2, T3> : IDisposable
    method Create (line 9) | public static StateTuple<T1> Create<T1>(T1 item1)
    method Create (line 14) | public static StateTuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2)
    method Create (line 19) | public static StateTuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 i...
    method Deconstruct (line 29) | public void Deconstruct(out T1 item1)
    method Dispose (line 34) | public void Dispose()
    method Deconstruct (line 69) | public void Deconstruct(out T1 item1, out T2 item2)
    method Dispose (line 75) | public void Dispose()
    method Deconstruct (line 113) | public void Deconstruct(out T1 item1, out T2 item2, out T3 item3)
    method Dispose (line 120) | public void Dispose()
  class StatePool (line 126) | internal static class StatePool<T1, T2, T3>
    method Create (line 44) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Return (line 56) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Create (line 85) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Return (line 98) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Create (line 130) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Return (line 144) | [MethodImpl(MethodImplOptions.AggressiveInlining)]

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/TaskTracker.cs
  class TaskTracker (line 14) | public static class TaskTracker
    class EditorEnableState (line 24) | public static class EditorEnableState
    method TrackActiveTask (line 67) | [Conditional("UNITY_EDITOR")]
    method RemoveTracking (line 90) | [Conditional("UNITY_EDITOR")]
    method CheckAndResetDirty (line 102) | public static bool CheckAndResetDirty()
    method ForEachActiveTask (line 110) | public static void ForEachActiveTask(Action<int, string, UniTaskStatus...
    method TypeBeautify (line 131) | static void TypeBeautify(Type type, StringBuilder sb)

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/UnityEqualityComparer.cs
  class UnityEqualityComparer (line 7) | internal static class UnityEqualityComparer
    class Cache (line 43) | static class Cache<T>
      method Cache (line 47) | static Cache()
    method GetDefault (line 61) | public static IEqualityComparer<T> GetDefault<T>()
    method GetDefaultHelper (line 66) | static object GetDefaultHelper(Type type)
    class Vector2EqualityComparer (line 91) | sealed class Vector2EqualityComparer : IEqualityComparer<Vector2>
      method Equals (line 93) | public bool Equals(Vector2 self, Vector2 vector)
      method GetHashCode (line 98) | public int GetHashCode(Vector2 obj)
    class Vector3EqualityComparer (line 104) | sealed class Vector3EqualityComparer : IEqualityComparer<Vector3>
      method Equals (line 106) | public bool Equals(Vector3 self, Vector3 vector)
      method GetHashCode (line 111) | public int GetHashCode(Vector3 obj)
    class Vector4EqualityComparer (line 117) | sealed class Vector4EqualityComparer : IEqualityComparer<Vector4>
      method Equals (line 119) | public bool Equals(Vector4 self, Vector4 vector)
      method GetHashCode (line 124) | public int GetHashCode(Vector4 obj)
    class ColorEqualityComparer (line 130) | sealed class ColorEqualityComparer : IEqualityComparer<Color>
      method Equals (line 132) | public bool Equals(Color self, Color other)
      method GetHashCode (line 137) | public int GetHashCode(Color obj)
    class RectEqualityComparer (line 143) | sealed class RectEqualityComparer : IEqualityComparer<Rect>
      method Equals (line 145) | public bool Equals(Rect self, Rect other)
      method GetHashCode (line 150) | public int GetHashCode(Rect obj)
    class BoundsEqualityComparer (line 156) | sealed class BoundsEqualityComparer : IEqualityComparer<Bounds>
      method Equals (line 158) | public bool Equals(Bounds self, Bounds vector)
      method GetHashCode (line 163) | public int GetHashCode(Bounds obj)
    class QuaternionEqualityComparer (line 169) | sealed class QuaternionEqualityComparer : IEqualityComparer<Quaternion>
      method Equals (line 171) | public bool Equals(Quaternion self, Quaternion vector)
      method GetHashCode (line 176) | public int GetHashCode(Quaternion obj)
    class Color32EqualityComparer (line 182) | sealed class Color32EqualityComparer : IEqualityComparer<Color32>
      method Equals (line 184) | public bool Equals(Color32 self, Color32 vector)
      method GetHashCode (line 189) | public int GetHashCode(Color32 obj)
    class Vector2IntEqualityComparer (line 197) | sealed class Vector2IntEqualityComparer : IEqualityComparer<Vector2Int>
      method Equals (line 199) | public bool Equals(Vector2Int self, Vector2Int vector)
      method GetHashCode (line 204) | public int GetHashCode(Vector2Int obj)
    class Vector3IntEqualityComparer (line 210) | sealed class Vector3IntEqualityComparer : IEqualityComparer<Vector3Int>
      method Equals (line 214) | public bool Equals(Vector3Int self, Vector3Int vector)
      method GetHashCode (line 219) | public int GetHashCode(Vector3Int obj)
    class RangeIntEqualityComparer (line 225) | sealed class RangeIntEqualityComparer : IEqualityComparer<RangeInt>
      method Equals (line 227) | public bool Equals(RangeInt self, RangeInt vector)
      method GetHashCode (line 232) | public int GetHashCode(RangeInt obj)
    class RectIntEqualityComparer (line 238) | sealed class RectIntEqualityComparer : IEqualityComparer<RectInt>
      method Equals (line 240) | public bool Equals(RectInt self, RectInt other)
      method GetHashCode (line 245) | public int GetHashCode(RectInt obj)
    class BoundsIntEqualityComparer (line 251) | sealed class BoundsIntEqualityComparer : IEqualityComparer<BoundsInt>
      method Equals (line 253) | public bool Equals(BoundsInt self, BoundsInt vector)
      method GetHashCode (line 259) | public int GetHashCode(BoundsInt obj)

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/UnityWebRequestExtensions.cs
  class UnityWebRequestResultExtensions (line 12) | internal static class UnityWebRequestResultExtensions
    method IsError (line 14) | public static bool IsError(this UnityWebRequest unityWebRequest)

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ValueStopwatch.cs
  type ValueStopwatch (line 6) | internal readonly struct ValueStopwatch
    method StartNew (line 12) | public static ValueStopwatch StartNew() => new ValueStopwatch(Stopwatc...
    method ValueStopwatch (line 14) | ValueStopwatch(long startTimestamp)

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/WeakDictionary.cs
  class WeakDictionary (line 10) | internal class WeakDictionary<TKey, TValue>
    method WeakDictionary (line 20) | public WeakDictionary(int capacity = 4, float loadFactor = 0.75f, IEqu...
    method TryAdd (line 29) | public bool TryAdd(TKey key, TValue value)
    method TryGetValue (line 43) | public bool TryGetValue(TKey key, out TValue value)
    method TryRemove (line 64) | public bool TryRemove(TKey key)
    method TryAddInternal (line 84) | bool TryAddInternal(TKey key, TValue value)
    method AddToBuckets (line 115) | bool AddToBuckets(Entry[] targetBuckets, TKey newKey, TValue value, in...
    method TryGetEntry (line 172) | bool TryGetEntry(TKey key, out int hashIndex, out Entry entry)
    method Remove (line 200) | void Remove(int hashIndex, Entry entry)
    method ToList (line 224) | public List<KeyValuePair<TKey, TValue>> ToList()
    method ToList (line 232) | public int ToList(ref List<KeyValuePair<TKey, TValue>> list, bool clea...
    method CalculateCapacity (line 280) | static int CalculateCapacity(int collectionSize, float loadFactor)
    class Entry (line 299) | class Entry
      method ToString (line 308) | public override string ToString()
      method Count (line 320) | int Count()

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Aggregate.cs
  class UniTaskAsyncEnumerable (line 8) | public static partial class UniTaskAsyncEnumerable
    method AggregateAsync (line 10) | public static UniTask<TSource> AggregateAsync<TSource>(this IUniTaskAs...
    method AggregateAsync (line 18) | public static UniTask<TAccumulate> AggregateAsync<TSource, TAccumulate...
    method AggregateAsync (line 26) | public static UniTask<TResult> AggregateAsync<TSource, TAccumulate, TR...
    method AggregateAwaitAsync (line 35) | public static UniTask<TSource> AggregateAwaitAsync<TSource>(this IUniT...
    method AggregateAwaitAsync (line 43) | public static UniTask<TAccumulate> AggregateAwaitAsync<TSource, TAccum...
    method AggregateAwaitAsync (line 51) | public static UniTask<TResult> AggregateAwaitAsync<TSource, TAccumulat...
    method AggregateAwaitWithCancellationAsync (line 60) | public static UniTask<TSource> AggregateAwaitWithCancellationAsync<TSo...
    method AggregateAwaitWithCancellationAsync (line 68) | public static UniTask<TAccumulate> AggregateAwaitWithCancellationAsync...
    method AggregateAwaitWithCancellationAsync (line 76) | public static UniTask<TResult> AggregateAwaitWithCancellationAsync<TSo...
  class Aggregate (line 86) | internal static class Aggregate
    method AggregateAsync (line 88) | internal static async UniTask<TSource> AggregateAsync<TSource>(IUniTas...
    method AggregateAsync (line 119) | internal static async UniTask<TAccumulate> AggregateAsync<TSource, TAc...
    method AggregateAsync (line 141) | internal static async UniTask<TResult> AggregateAsync<TSource, TAccumu...
    method AggregateAwaitAsync (line 165) | internal static async UniTask<TSource> AggregateAwaitAsync<TSource>(IU...
    method AggregateAwaitAsync (line 196) | internal static async UniTask<TAccumulate> AggregateAwaitAsync<TSource...
    method AggregateAwaitAsync (line 218) | internal static async UniTask<TResult> AggregateAwaitAsync<TSource, TA...
    method AggregateAwaitWithCancellationAsync (line 243) | internal static async UniTask<TSource> AggregateAwaitWithCancellationA...
    method AggregateAwaitWithCancellationAsync (line 274) | internal static async UniTask<TAccumulate> AggregateAwaitWithCancellat...
    method AggregateAwaitWithCancellationAsync (line 296) | internal static async UniTask<TResult> AggregateAwaitWithCancellationA...

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/All.cs
  class UniTaskAsyncEnumerable (line 7) | public static partial class UniTaskAsyncEnumerable
    method AllAsync (line 9) | public static UniTask<Boolean> AllAsync<TSource>(this IUniTaskAsyncEnu...
    method AllAwaitAsync (line 17) | public static UniTask<Boolean> AllAwaitAsync<TSource>(this IUniTaskAsy...
    method AllAwaitWithCancellationAsync (line 25) | public static UniTask<Boolean> AllAwaitWithCancellationAsync<TSource>(...
  class All (line 34) | internal static class All
    method AllAsync (line 36) | internal static async UniTask<bool> AllAsync<TSource>(IUniTaskAsyncEnu...
    method AllAwaitAsync (line 60) | internal static async UniTask<bool> AllAwaitAsync<TSource>(IUniTaskAsy...
    method AllAwaitWithCancellationAsync (line 84) | internal static async UniTask<bool> AllAwaitWithCancellationAsync<TSou...

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Any.cs
  class UniTaskAsyncEnumerable (line 7) | public static partial class UniTaskAsyncEnumerable
    method AnyAsync (line 9) | public static UniTask<Boolean> AnyAsync<TSource>(this IUniTaskAsyncEnu...
    method AnyAsync (line 16) | public static UniTask<Boolean> AnyAsync<TSource>(this IUniTaskAsyncEnu...
    method AnyAwaitAsync (line 24) | public static UniTask<Boolean> AnyAwaitAsync<TSource>(this IUniTaskAsy...
    method AnyAwaitWithCancellationAsync (line 32) | public static UniTask<Boolean> AnyAwaitWithCancellationAsync<TSource>(...
  class Any (line 41) | internal static class Any
    method AnyAsync (line 43) | internal static async UniTask<bool> AnyAsync<TSource>(IUniTaskAsyncEnu...
    method AnyAsync (line 64) | internal static async UniTask<bool> AnyAsync<TSource>(IUniTaskAsyncEnu...
    method AnyAwaitAsync (line 88) | internal static async UniTask<bool> AnyAwaitAsync<TSource>(IUniTaskAsy...
    method AnyAwaitWithCancellationAsync (line 112) | internal static async UniTask<bool> AnyAwaitWithCancellationAsync<TSou...

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/AppendPrepend.cs
  class UniTaskAsyncEnumerable (line 7) | public static partial class UniTaskAsyncEnumerable
    method Append (line 9) | public static IUniTaskAsyncEnumerable<TSource> Append<TSource>(this IU...
    method Prepend (line 16) | public static IUniTaskAsyncEnumerable<TSource> Prepend<TSource>(this I...
  class AppendPrepend (line 24) | internal sealed class AppendPrepend<TSource> : IUniTaskAsyncEnumerable<T...
    method AppendPrepend (line 30) | public AppendPrepend(IUniTaskAsyncEnumerable<TSource> source, TSource ...
    method GetAsyncEnumerator (line 37) | public IUniTaskAsyncEnumerator<TSource> GetAsyncEnumerator(Cancellatio...
    class _AppendPrepend (line 42) | sealed class _AppendPrepend : MoveNextSource, IUniTaskAsyncEnumerator<...
      type State (line 44) | enum State : byte
      method _AppendPrepend (line 62) | public _AppendPrepend(IUniTaskAsyncEnumerable<TSource> source, TSour...
      method MoveNextAsync (line 75) | public UniTask<bool> MoveNextAsync()
      method MoveNextCore (line 111) | static void MoveNextCore(object state)
      method DisposeAsync (line 139) | public UniTask DisposeAsync()

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/AsUniTaskAsyncEnumerable.cs
  class UniTaskAsyncEnumerable (line 3) | public static partial class UniTaskAsyncEnumerable
    method AsUniTaskAsyncEnumerable (line 5) | public static IUniTaskAsyncEnumerable<TSource> AsUniTaskAsyncEnumerabl...

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/AsyncEnumeratorBase.cs
  class AsyncEnumeratorBase (line 8) | internal abstract class AsyncEnumeratorBase<TSource, TResult> : MoveNext...
    method AsyncEnumeratorBase (line 18) | public AsyncEnumeratorBase(IUniTaskAsyncEnumerable<TSource> source, Ca...
    method TryMoveNextCore (line 30) | protected abstract bool TryMoveNextCore(bool sourceHasCurrent, out boo...
    method MoveNextAsync (line 39) | public UniTask<bool> MoveNextAsync()
    method OnFirstIteration (line 54) | protected virtual bool OnFirstIteration()
    method SourceMoveNext (line 59) | protected void SourceMoveNext()
    method MoveNextCallBack (line 94) | static void MoveNextCallBack(object state)
    method DisposeAsync (line 123) | public virtual UniTask DisposeAsync()
  class AsyncEnumeratorAwaitSelectorBase (line 134) | internal abstract class AsyncEnumeratorAwaitSelectorBase<TSource, TResul...
    method AsyncEnumeratorAwaitSelectorBase (line 148) | public AsyncEnumeratorAwaitSelectorBase(IUniTaskAsyncEnumerable<TSourc...
    method TransformAsync (line 157) | protected abstract UniTask<TAwait> TransformAsync(TSource sourceCurrent);
    method TrySetCurrentCore (line 158) | protected abstract bool TrySetCurrentCore(TAwait awaitResult, out bool...
    method ActionCompleted (line 163) | protected (bool waitCallback, bool requireNextIteration) ActionComplet...
    method WaitAwaitCallback (line 176) | protected (bool waitCallback, bool requireNextIteration) WaitAwaitCall...
    method IterateFinished (line 177) | protected (bool waitCallback, bool requireNextIteration) IterateFinish...
    method MoveNextAsync (line 183) | public UniTask<bool> MoveNextAsync()
    method SourceMoveNext (line 195) | protected void SourceMoveNext()
    method TryMoveNextCore (line 232) | (bool waitCallback, bool requireNextIteration) TryMoveNextCore(bool so...
    method UnwarapTask (line 257) | protected bool UnwarapTask(UniTask<TAwait> taskResult, out TAwait result)
    method MoveNextCallBack (line 274) | static void MoveNextCallBack(object state)
    method SetCurrentCallBack (line 304) | static void SetCurrentCallBack(object state)
    method DisposeAsync (line 346) | public virtual UniTask DisposeAsync()

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Average.cs
  class UniTaskAsyncEnumerable (line 7) | public static partial class UniTaskAsyncEnumerable
    method AverageAsync (line 9) | public static UniTask<double> AverageAsync(this IUniTaskAsyncEnumerabl...
    method AverageAsync (line 16) | public static UniTask<double> AverageAsync<TSource>(this IUniTaskAsync...
    method AverageAwaitAsync (line 24) | public static UniTask<double> AverageAwaitAsync<TSource>(this IUniTask...
    method AverageAwaitWithCancellationAsync (line 32) | public static UniTask<double> AverageAwaitWithCancellationAsync<TSourc...
    method AverageAsync (line 40) | public static UniTask<double> AverageAsync(this IUniTaskAsyncEnumerabl...
    method AverageAsync (line 47) | public static UniTask<double> AverageAsync<TSource>(this IUniTaskAsync...
    method AverageAwaitAsync (line 55) | public static UniTask<double> AverageAwaitAsync<TSource>(this IUniTask...
    method AverageAwaitWithCancellationAsync (line 63) | public static UniTask<double> AverageAwaitWithCancellationAsync<TSourc...
    method AverageAsync (line 71) | public static UniTask<float> AverageAsync(this IUniTaskAsyncEnumerable...
    method AverageAsync (line 78) | public static UniTask<float> AverageAsync<TSource>(this IUniTaskAsyncE...
    method AverageAwaitAsync (line 86) | public static UniTask<float> AverageAwaitAsync<TSource>(this IUniTaskA...
    method AverageAwaitWithCancellationAsync (line 94) | public static UniTask<float> AverageAwaitWithCancellationAsync<TSource...
    method AverageAsync (line 102) | public static UniTask<double> AverageAsync(this IUniTaskAsyncEnumerabl...
    method AverageAsync (line 109) | public static UniTask<double> AverageAsync<TSource>(this IUniTaskAsync...
    method AverageAwaitAsync (line 117) | public static UniTask<double> AverageAwaitAsync<TSource>(this IUniTask...
    method AverageAwaitWithCancellationAsync (line 125) | public static UniTask<double> AverageAwaitWithCancellationAsync<TSourc...
    method AverageAsync (line 133) | public static UniTask<decimal> AverageAsync(this IUniTaskAsyncEnumerab...
    method AverageAsync (line 140) | public static UniTask<decimal> AverageAsync<TSource>(this IUniTaskAsyn...
    method AverageAwaitAsync (line 148) | public static UniTask<decimal> AverageAwaitAsync<TSource>(this IUniTas...
    method AverageAwaitWithCancellationAsync (line 156) | public static UniTask<decimal> AverageAwaitWithCancellationAsync<TSour...
    method AverageAsync (line 164) | public static UniTask<double?> AverageAsync(this IUniTaskAsyncEnumerab...
    method AverageAsync (line 171) | public static UniTask<double?> AverageAsync<TSource>(this IUniTaskAsyn...
    method AverageAwaitAsync (line 179) | public static UniTask<double?> AverageAwaitAsync<TSource>(this IUniTas...
    method AverageAwaitWithCancellationAsync (line 187) | public static UniTask<double?> AverageAwaitWithCancellationAsync<TSour...
    method AverageAsync (line 195) | public static UniTask<double?> AverageAsync(this IUniTaskAsyncEnumerab...
    method AverageAsync (line 202) | public static UniTask<double?> AverageAsync<TSource>(this IUniTaskAsyn...
    method AverageAwaitAsync (line 210) | public static UniTask<double?> AverageAwaitAsync<TSource>(this IUniTas...
    method AverageAwaitWithCancellationAsync (line 218) | public static UniTask<double?> AverageAwaitWithCancellationAsync<TSour...
    method AverageAsync (line 226) | public static UniTask<float?> AverageAsync(this IUniTaskAsyncEnumerabl...
    method AverageAsync (line 233) | public static UniTask<float?> AverageAsync<TSource>(this IUniTaskAsync...
    method AverageAwaitAsync (line 241) | public static UniTask<float?> AverageAwaitAsync<TSource>(this IUniTask...
    method AverageAwaitWithCancellationAsync (line 249) | public static UniTask<float?> AverageAwaitWithCancellationAsync<TSourc...
    method AverageAsync (line 257) | public static UniTask<double?> AverageAsync(this IUniTaskAsyncEnumerab...
    method AverageAsync (line 264) | public static UniTask<double?> AverageAsync<TSource>(this IUniTaskAsyn...
    method AverageAwaitAsync (line 272) | public static UniTask<double?> AverageAwaitAsync<TSource>(this IUniTas...
    method AverageAwaitWithCancellationAsync (line 280) | public static UniTask<double?> AverageAwaitWithCancellationAsync<TSour...
    method AverageAsync (line 288) | public static UniTask<decimal?> AverageAsync(this IUniTaskAsyncEnumera...
    method AverageAsync (line 295) | public static UniTask<decimal?> AverageAsync<TSource>(this IUniTaskAsy...
    method AverageAwaitAsync (line 303) | public static UniTask<decimal?> AverageAwaitAsync<TSource>(this IUniTa...
    method AverageAwaitWithCancellationAsync (line 311) | public static UniTask<decimal?> AverageAwaitWithCancellationAsync<TSou...
  class Average (line 321) | internal static class Average
    method AverageAsync (line 323) | public static async UniTask<double> AverageAsync(IUniTaskAsyncEnumerab...
    method AverageAsync (line 351) | public static async UniTask<double> AverageAsync<TSource>(IUniTaskAsyn...
    method AverageAwaitAsync (line 379) | public static async UniTask<double> AverageAwaitAsync<TSource>(IUniTas...
    method AverageAwaitWithCancellationAsync (line 407) | public static async UniTask<double> AverageAwaitWithCancellationAsync<...
    method AverageAsync (line 435) | public static async UniTask<double> AverageAsync(IUniTaskAsyncEnumerab...
    method AverageAsync (line 463) | public static async UniTask<double> AverageAsync<TSource>(IUniTaskAsyn...
    method AverageAwaitAsync (line 491) | public static async UniTask<double> AverageAwaitAsync<TSource>(IUniTas...
    method AverageAwaitWithCancellationAsync (line 519) | public static async UniTask<double> AverageAwaitWithCancellationAsync<...
    method AverageAsync (line 547) | public static async UniTask<float> AverageAsync(IUniTaskAsyncEnumerabl...
    method AverageAsync (line 575) | public static async UniTask<float> AverageAsync<TSource>(IUniTaskAsync...
    method AverageAwaitAsync (line 603) | public static async UniTask<float> AverageAwaitAsync<TSource>(IUniTask...
    method AverageAwaitWithCancellationAsync (line 631) | public static async UniTask<float> AverageAwaitWithCancellationAsync<T...
    method AverageAsync (line 659) | public static async UniTask<double> AverageAsync(IUniTaskAsyncEnumerab...
    method AverageAsync (line 687) | public static async UniTask<double> AverageAsync<TSource>(IUniTaskAsyn...
    method AverageAwaitAsync (line 715) | public static async UniTask<double> AverageAwaitAsync<TSource>(IUniTas...
    method AverageAwaitWithCancellationAsync (line 743) | public static async UniTask<double> AverageAwaitWithCancellationAsync<...
    method AverageAsync (line 771) | public static async UniTask<decimal> AverageAsync(IUniTaskAsyncEnumera...
    method AverageAsync (line 799) | public static async UniTask<decimal> AverageAsync<TSource>(IUniTaskAsy...
    method AverageAwaitAsync (line 827) | public static async UniTask<decimal> AverageAwaitAsync<TSource>(IUniTa...
    method AverageAwaitWithCancellationAsync (line 855) | public static async UniTask<decimal> AverageAwaitWithCancellationAsync...
    method AverageAsync (line 883) | public static async UniTask<double?> AverageAsync(IUniTaskAsyncEnumera...
    method AverageAsync (line 915) | public static async UniTask<double?> AverageAsync<TSource>(IUniTaskAsy...
    method AverageAwaitAsync (line 947) | public static async UniTask<double?> AverageAwaitAsync<TSource>(IUniTa...
    method AverageAwaitWithCancellationAsync (line 979) | public static async UniTask<double?> AverageAwaitWithCancellationAsync...
    method AverageAsync (line 1011) | public static async UniTask<double?> AverageAsync(IUniTaskAsyncEnumera...
    method AverageAsync (line 1043) | public static async UniTask<double?> AverageAsync<TSource>(IUniTaskAsy...
    method AverageAwaitAsync (line 1075) | public static async UniTask<double?> AverageAwaitAsync<TSource>(IUniTa...
    method AverageAwaitWithCancellationAsync (line 1107) | public static async UniTask<double?> AverageAwaitWithCancellationAsync...
    method AverageAsync (line 1139) | public static async UniTask<float?> AverageAsync(IUniTaskAsyncEnumerab...
    method AverageAsync (line 1171) | public static async UniTask<float?> AverageAsync<TSource>(IUniTaskAsyn...
    method AverageAwaitAsync (line 1203) | public static async UniTask<float?> AverageAwaitAsync<TSource>(IUniTas...
    method AverageAwaitWithCancellationAsync (line 1235) | public static async UniTask<float?> AverageAwaitWithCancellationAsync<...
    method AverageAsync (line 1267) | public static async UniTask<double?> AverageAsync(IUniTaskAsyncEnumera...
    method AverageAsync (line 1299) | public static async UniTask<double?> AverageAsync<TSource>(IUniTaskAsy...
    method AverageAwaitAsync (line 1331) | public static async UniTask<double?> AverageAwaitAsync<TSource>(IUniTa...
    method AverageAwaitWithCancellationAsync (line 1363) | public static async UniTask<double?> AverageAwaitWithCancellationAsync...
    method AverageAsync (line 1395) | public static async UniTask<decimal?> AverageAsync(IUniTaskAsyncEnumer...
    method AverageAsync (line 1427) | public static async UniTask<decimal?> AverageAsync<TSource>(IUniTaskAs...
    method AverageAwaitAsync (line 1459) | public static async UniTask<decimal?> AverageAwaitAsync<TSource>(IUniT...
    method AverageAwaitWithCancellationAsync (line 1491) | public static async UniTask<decimal?> AverageAwaitWithCancellationAsyn...

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Buffer.cs
  class UniTaskAsyncEnumerable (line 8) | public static partial class UniTaskAsyncEnumerable
    method Buffer (line 10) | public static IUniTaskAsyncEnumerable<IList<TSource>> Buffer<TSource>(...
    method Buffer (line 18) | public static IUniTaskAsyncEnumerable<IList<TSource>> Buffer<TSource>(...
  class Buffer (line 28) | internal sealed class Buffer<TSource> : IUniTaskAsyncEnumerable<IList<TS...
    method Buffer (line 33) | public Buffer(IUniTaskAsyncEnumerable<TSource> source, int count)
    method GetAsyncEnumerator (line 39) | public IUniTaskAsyncEnumerator<IList<TSource>> GetAsyncEnumerator(Canc...
    class _Buffer (line 44) | sealed class _Buffer : MoveNextSource, IUniTaskAsyncEnumerator<IList<T...
      method _Buffer (line 59) | public _Buffer(IUniTaskAsyncEnumerable<TSource> source, int count, C...
      method MoveNextAsync (line 70) | public UniTask<bool> MoveNextAsync()
      method SourceMoveNext (line 85) | void SourceMoveNext()
      method MoveNextCore (line 131) | static void MoveNextCore(object state)
      method DisposeAsync (line 170) | public UniTask DisposeAsync()
  class BufferSkip (line 182) | internal sealed class BufferSkip<TSource> : IUniTaskAsyncEnumerable<ILis...
    method BufferSkip (line 188) | public BufferSkip(IUniTaskAsyncEnumerable<TSource> source, int count, ...
    method GetAsyncEnumerator (line 195) | public IUniTaskAsyncEnumerator<IList<TSource>> GetAsyncEnumerator(Canc...
    class _BufferSkip (line 200) | sealed class _BufferSkip : MoveNextSource, IUniTaskAsyncEnumerator<ILi...
      method _BufferSkip (line 217) | public _BufferSkip(IUniTaskAsyncEnumerable<TSource> source, int coun...
      method MoveNextAsync (line 228) | public UniTask<bool> MoveNextAsync()
      method SourceMoveNext (line 243) | void SourceMoveNext()
      method MoveNextCore (line 287) | static void MoveNextCore(object state)
      method DisposeAsync (line 334) | public UniTask DisposeAsync()

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Cast.cs
  class UniTaskAsyncEnumerable (line 7) | public static partial class UniTaskAsyncEnumerable
    method Cast (line 9) | public static IUniTaskAsyncEnumerable<TResult> Cast<TResult>(this IUni...
  class Cast (line 17) | internal sealed class Cast<TResult> : IUniTaskAsyncEnumerable<TResult>
    method Cast (line 21) | public Cast(IUniTaskAsyncEnumerable<object> source)
    method GetAsyncEnumerator (line 26) | public IUniTaskAsyncEnumerator<TResult> GetAsyncEnumerator(Cancellatio...
    class _Cast (line 31) | class _Cast : AsyncEnumeratorBase<object, TResult>
      method _Cast (line 33) | public _Cast(IUniTaskAsyncEnumerable<object> source, CancellationTok...
      method TryMoveNextCore (line 39) | protected override bool TryMoveNextCore(bool sourceHasCurrent, out b...

FILE: src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/CombineLatest.cs
  class UniTaskAsyncEnumerable (line 7) | public static partial class UniTaskAsyncEnumerable
    method CombineLatest (line 9) | public static IUniTaskAsyncEnumerable<TResult> CombineLatest<T1, T2, T...
    method CombineLatest (line 18) | public static IUniTaskAsyncEnumerable<TResult> CombineLatest<T1, T2, T...
    method CombineLatest (line 28) | public static IUniTaskAsyncEnumerable<TResult> CombineLatest<T1, T2, T...
    method CombineLatest (line 39) | public static IUniTaskAsyncEnumerable<TResult> CombineLatest<T1, T2, T...
    method CombineLatest (line 51) | public static IUniTaskAsyncEnumerable<TResult> CombineLatest<T1, T2, T...
    method CombineLatest (line 64) | public static IUniTaskAsyncEnumerable<TResult> CombineLatest<T1, T2, T...
    method CombineLatest (line 78) | public static IUniTaskAsyncEnumerable<TResult> CombineLatest<T1, T2, T...
    method CombineLatest (line 93) | public static IUniTaskAsyncEnumerable<TResult> CombineLatest<T1, T2, T...
    method CombineLatest (line 109) | public static IUniTaskAsyncEnumerable<TResult> CombineLatest<T1, T2, T...
    method CombineLatest (line 126) | public static IUniTaskAsyncEnumerable<TResult> CombineLatest<T1, T2, T...
    method CombineLatest (line 144) | public static IUniTaskAsyncEnumerable<TResult> CombineLatest<T1, T2, T...
    method CombineLatest (line 163) | public static IUniTaskAsyncEnumerable<TResult> CombineLatest<T1, T2, T...
    method CombineLatest (line 183) | public static IUniTaskAsyncEnumerable<TResult> CombineLatest<T1, T2, T...
    method CombineLatest (line 204) | public static IUniTaskAsyncEnumerable<TResult> CombineLatest<T1, T2, T...
  class CombineLatest (line 228) | internal class CombineLatest<T1, T2, TResult> : IUniTaskAsyncEnumerable<...
    method CombineLatest (line 235) | public CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskAsyn...
    method GetAsyncEnumerator (line 243) | public IUniTaskAsyncEnumerator<TResult> GetAsyncEnumerator(Cancellatio...
    class _CombineLatest (line 248) | class _CombineLatest : MoveNextSource, IUniTaskAsyncEnumerator<TResult>
      method _CombineLatest (line 276) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 288) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 339) | static void Completed1(object state)
      method Completed2 (line 394) | static void Completed2(object state)
      method TrySetResult (line 449) | bool TrySetResult()
      method DisposeAsync (line 463) | public async UniTask DisposeAsync()
      method _CombineLatest (line 536) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 549) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 614) | static void Completed1(object state)
      method Completed2 (line 669) | static void Completed2(object state)
      method Completed3 (line 724) | static void Completed3(object state)
      method TrySetResult (line 779) | bool TrySetResult()
      method DisposeAsync (line 793) | public async UniTask DisposeAsync()
      method _CombineLatest (line 880) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 894) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 973) | static void Completed1(object state)
      method Completed2 (line 1028) | static void Completed2(object state)
      method Completed3 (line 1083) | static void Completed3(object state)
      method Completed4 (line 1138) | static void Completed4(object state)
      method TrySetResult (line 1193) | bool TrySetResult()
      method DisposeAsync (line 1207) | public async UniTask DisposeAsync()
      method _CombineLatest (line 1308) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 1323) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 1416) | static void Completed1(object state)
      method Completed2 (line 1471) | static void Completed2(object state)
      method Completed3 (line 1526) | static void Completed3(object state)
      method Completed4 (line 1581) | static void Completed4(object state)
      method Completed5 (line 1636) | static void Completed5(object state)
      method TrySetResult (line 1691) | bool TrySetResult()
      method DisposeAsync (line 1705) | public async UniTask DisposeAsync()
      method _CombineLatest (line 1820) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 1836) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 1943) | static void Completed1(object state)
      method Completed2 (line 1998) | static void Completed2(object state)
      method Completed3 (line 2053) | static void Completed3(object state)
      method Completed4 (line 2108) | static void Completed4(object state)
      method Completed5 (line 2163) | static void Completed5(object state)
      method Completed6 (line 2218) | static void Completed6(object state)
      method TrySetResult (line 2273) | bool TrySetResult()
      method DisposeAsync (line 2287) | public async UniTask DisposeAsync()
      method _CombineLatest (line 2416) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 2433) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 2554) | static void Completed1(object state)
      method Completed2 (line 2609) | static void Completed2(object state)
      method Completed3 (line 2664) | static void Completed3(object state)
      method Completed4 (line 2719) | static void Completed4(object state)
      method Completed5 (line 2774) | static void Completed5(object state)
      method Completed6 (line 2829) | static void Completed6(object state)
      method Completed7 (line 2884) | static void Completed7(object state)
      method TrySetResult (line 2939) | bool TrySetResult()
      method DisposeAsync (line 2953) | public async UniTask DisposeAsync()
      method _CombineLatest (line 3096) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 3114) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 3249) | static void Completed1(object state)
      method Completed2 (line 3304) | static void Completed2(object state)
      method Completed3 (line 3359) | static void Completed3(object state)
      method Completed4 (line 3414) | static void Completed4(object state)
      method Completed5 (line 3469) | static void Completed5(object state)
      method Completed6 (line 3524) | static void Completed6(object state)
      method Completed7 (line 3579) | static void Completed7(object state)
      method Completed8 (line 3634) | static void Completed8(object state)
      method TrySetResult (line 3689) | bool TrySetResult()
      method DisposeAsync (line 3703) | public async UniTask DisposeAsync()
      method _CombineLatest (line 3860) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 3879) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 4028) | static void Completed1(object state)
      method Completed2 (line 4083) | static void Completed2(object state)
      method Completed3 (line 4138) | static void Completed3(object state)
      method Completed4 (line 4193) | static void Completed4(object state)
      method Completed5 (line 4248) | static void Completed5(object state)
      method Completed6 (line 4303) | static void Completed6(object state)
      method Completed7 (line 4358) | static void Completed7(object state)
      method Completed8 (line 4413) | static void Completed8(object state)
      method Completed9 (line 4468) | static void Completed9(object state)
      method TrySetResult (line 4523) | bool TrySetResult()
      method DisposeAsync (line 4537) | public async UniTask DisposeAsync()
      method _CombineLatest (line 4708) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 4728) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 4891) | static void Completed1(object state)
      method Completed2 (line 4946) | static void Completed2(object state)
      method Completed3 (line 5001) | static void Completed3(object state)
      method Completed4 (line 5056) | static void Completed4(object state)
      method Completed5 (line 5111) | static void Completed5(object state)
      method Completed6 (line 5166) | static void Completed6(object state)
      method Completed7 (line 5221) | static void Completed7(object state)
      method Completed8 (line 5276) | static void Completed8(object state)
      method Completed9 (line 5331) | static void Completed9(object state)
      method Completed10 (line 5386) | static void Completed10(object state)
      method TrySetResult (line 5441) | bool TrySetResult()
      method DisposeAsync (line 5455) | public async UniTask DisposeAsync()
      method _CombineLatest (line 5640) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 5661) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 5838) | static void Completed1(object state)
      method Completed2 (line 5893) | static void Completed2(object state)
      method Completed3 (line 5948) | static void Completed3(object state)
      method Completed4 (line 6003) | static void Completed4(object state)
      method Completed5 (line 6058) | static void Completed5(object state)
      method Completed6 (line 6113) | static void Completed6(object state)
      method Completed7 (line 6168) | static void Completed7(object state)
      method Completed8 (line 6223) | static void Completed8(object state)
      method Completed9 (line 6278) | static void Completed9(object state)
      method Completed10 (line 6333) | static void Completed10(object state)
      method Completed11 (line 6388) | static void Completed11(object state)
      method TrySetResult (line 6443) | bool TrySetResult()
      method DisposeAsync (line 6457) | public async UniTask DisposeAsync()
      method _CombineLatest (line 6656) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 6678) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 6869) | static void Completed1(object state)
      method Completed2 (line 6924) | static void Completed2(object state)
      method Completed3 (line 6979) | static void Completed3(object state)
      method Completed4 (line 7034) | static void Completed4(object state)
      method Completed5 (line 7089) | static void Completed5(object state)
      method Completed6 (line 7144) | static void Completed6(object state)
      method Completed7 (line 7199) | static void Completed7(object state)
      method Completed8 (line 7254) | static void Completed8(object state)
      method Completed9 (line 7309) | static void Completed9(object state)
      method Completed10 (line 7364) | static void Completed10(object state)
      method Completed11 (line 7419) | static void Completed11(object state)
      method Completed12 (line 7474) | static void Completed12(object state)
      method TrySetResult (line 7529) | bool TrySetResult()
      method DisposeAsync (line 7543) | public async UniTask DisposeAsync()
      method _CombineLatest (line 7756) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 7779) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 7984) | static void Completed1(object state)
      method Completed2 (line 8039) | static void Completed2(object state)
      method Completed3 (line 8094) | static void Completed3(object state)
      method Completed4 (line 8149) | static void Completed4(object state)
      method Completed5 (line 8204) | static void Completed5(object state)
      method Completed6 (line 8259) | static void Completed6(object state)
      method Completed7 (line 8314) | static void Completed7(object state)
      method Completed8 (line 8369) | static void Completed8(object state)
      method Completed9 (line 8424) | static void Completed9(object state)
      method Completed10 (line 8479) | static void Completed10(object state)
      method Completed11 (line 8534) | static void Completed11(object state)
      method Completed12 (line 8589) | static void Completed12(object state)
      method Completed13 (line 8644) | static void Completed13(object state)
      method TrySetResult (line 8699) | bool TrySetResult()
      method DisposeAsync (line 8713) | public async UniTask DisposeAsync()
      method _CombineLatest (line 8940) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 8964) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 9183) | static void Completed1(object state)
      method Completed2 (line 9238) | static void Completed2(object state)
      method Completed3 (line 9293) | static void Completed3(object state)
      method Completed4 (line 9348) | static void Completed4(object state)
      method Completed5 (line 9403) | static void Completed5(object state)
      method Completed6 (line 9458) | static void Completed6(object state)
      method Completed7 (line 9513) | static void Completed7(object state)
      method Completed8 (line 9568) | static void Completed8(object state)
      method Completed9 (line 9623) | static void Completed9(object state)
      method Completed10 (line 9678) | static void Completed10(object state)
      method Completed11 (line 9733) | static void Completed11(object state)
      method Completed12 (line 9788) | static void Completed12(object state)
      method Completed13 (line 9843) | static void Completed13(object state)
      method Completed14 (line 9898) | static void Completed14(object state)
      method TrySetResult (line 9953) | bool TrySetResult()
      method DisposeAsync (line 9967) | public async UniTask DisposeAsync()
      method _CombineLatest (line 10208) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 10233) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 10466) | static void Completed1(object state)
      method Completed2 (line 10521) | static void Completed2(object state)
      method Completed3 (line 10576) | static void Completed3(object state)
      method Completed4 (line 10631) | static void Completed4(object state)
      method Completed5 (line 10686) | static void Completed5(object state)
      method Completed6 (line 10741) | static void Completed6(object state)
      method Completed7 (line 10796) | static void Completed7(object state)
      method Completed8 (line 10851) | static void Completed8(object state)
      method Completed9 (line 10906) | static void Completed9(object state)
      method Completed10 (line 10961) | static void Completed10(object state)
      method Completed11 (line 11016) | static void Completed11(object state)
      method Completed12 (line 11071) | static void Completed12(object state)
      method Completed13 (line 11126) | static void Completed13(object state)
      method Completed14 (line 11181) | static void Completed14(object state)
      method Completed15 (line 11236) | static void Completed15(object state)
      method TrySetResult (line 11291) | bool TrySetResult()
      method DisposeAsync (line 11305) | public async UniTask DisposeAsync()
    method CombineLatest (line 486) | public CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskAsyn...
    method GetAsyncEnumerator (line 495) | public IUniTaskAsyncEnumerator<TResult> GetAsyncEnumerator(Cancellatio...
    class _CombineLatest (line 500) | class _CombineLatest : MoveNextSource, IUniTaskAsyncEnumerator<TResult>
      method _CombineLatest (line 276) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 288) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 339) | static void Completed1(object state)
      method Completed2 (line 394) | static void Completed2(object state)
      method TrySetResult (line 449) | bool TrySetResult()
      method DisposeAsync (line 463) | public async UniTask DisposeAsync()
      method _CombineLatest (line 536) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 549) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 614) | static void Completed1(object state)
      method Completed2 (line 669) | static void Completed2(object state)
      method Completed3 (line 724) | static void Completed3(object state)
      method TrySetResult (line 779) | bool TrySetResult()
      method DisposeAsync (line 793) | public async UniTask DisposeAsync()
      method _CombineLatest (line 880) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 894) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 973) | static void Completed1(object state)
      method Completed2 (line 1028) | static void Completed2(object state)
      method Completed3 (line 1083) | static void Completed3(object state)
      method Completed4 (line 1138) | static void Completed4(object state)
      method TrySetResult (line 1193) | bool TrySetResult()
      method DisposeAsync (line 1207) | public async UniTask DisposeAsync()
      method _CombineLatest (line 1308) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 1323) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 1416) | static void Completed1(object state)
      method Completed2 (line 1471) | static void Completed2(object state)
      method Completed3 (line 1526) | static void Completed3(object state)
      method Completed4 (line 1581) | static void Completed4(object state)
      method Completed5 (line 1636) | static void Completed5(object state)
      method TrySetResult (line 1691) | bool TrySetResult()
      method DisposeAsync (line 1705) | public async UniTask DisposeAsync()
      method _CombineLatest (line 1820) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 1836) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 1943) | static void Completed1(object state)
      method Completed2 (line 1998) | static void Completed2(object state)
      method Completed3 (line 2053) | static void Completed3(object state)
      method Completed4 (line 2108) | static void Completed4(object state)
      method Completed5 (line 2163) | static void Completed5(object state)
      method Completed6 (line 2218) | static void Completed6(object state)
      method TrySetResult (line 2273) | bool TrySetResult()
      method DisposeAsync (line 2287) | public async UniTask DisposeAsync()
      method _CombineLatest (line 2416) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 2433) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 2554) | static void Completed1(object state)
      method Completed2 (line 2609) | static void Completed2(object state)
      method Completed3 (line 2664) | static void Completed3(object state)
      method Completed4 (line 2719) | static void Completed4(object state)
      method Completed5 (line 2774) | static void Completed5(object state)
      method Completed6 (line 2829) | static void Completed6(object state)
      method Completed7 (line 2884) | static void Completed7(object state)
      method TrySetResult (line 2939) | bool TrySetResult()
      method DisposeAsync (line 2953) | public async UniTask DisposeAsync()
      method _CombineLatest (line 3096) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 3114) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 3249) | static void Completed1(object state)
      method Completed2 (line 3304) | static void Completed2(object state)
      method Completed3 (line 3359) | static void Completed3(object state)
      method Completed4 (line 3414) | static void Completed4(object state)
      method Completed5 (line 3469) | static void Completed5(object state)
      method Completed6 (line 3524) | static void Completed6(object state)
      method Completed7 (line 3579) | static void Completed7(object state)
      method Completed8 (line 3634) | static void Completed8(object state)
      method TrySetResult (line 3689) | bool TrySetResult()
      method DisposeAsync (line 3703) | public async UniTask DisposeAsync()
      method _CombineLatest (line 3860) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 3879) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 4028) | static void Completed1(object state)
      method Completed2 (line 4083) | static void Completed2(object state)
      method Completed3 (line 4138) | static void Completed3(object state)
      method Completed4 (line 4193) | static void Completed4(object state)
      method Completed5 (line 4248) | static void Completed5(object state)
      method Completed6 (line 4303) | static void Completed6(object state)
      method Completed7 (line 4358) | static void Completed7(object state)
      method Completed8 (line 4413) | static void Completed8(object state)
      method Completed9 (line 4468) | static void Completed9(object state)
      method TrySetResult (line 4523) | bool TrySetResult()
      method DisposeAsync (line 4537) | public async UniTask DisposeAsync()
      method _CombineLatest (line 4708) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 4728) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 4891) | static void Completed1(object state)
      method Completed2 (line 4946) | static void Completed2(object state)
      method Completed3 (line 5001) | static void Completed3(object state)
      method Completed4 (line 5056) | static void Completed4(object state)
      method Completed5 (line 5111) | static void Completed5(object state)
      method Completed6 (line 5166) | static void Completed6(object state)
      method Completed7 (line 5221) | static void Completed7(object state)
      method Completed8 (line 5276) | static void Completed8(object state)
      method Completed9 (line 5331) | static void Completed9(object state)
      method Completed10 (line 5386) | static void Completed10(object state)
      method TrySetResult (line 5441) | bool TrySetResult()
      method DisposeAsync (line 5455) | public async UniTask DisposeAsync()
      method _CombineLatest (line 5640) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 5661) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 5838) | static void Completed1(object state)
      method Completed2 (line 5893) | static void Completed2(object state)
      method Completed3 (line 5948) | static void Completed3(object state)
      method Completed4 (line 6003) | static void Completed4(object state)
      method Completed5 (line 6058) | static void Completed5(object state)
      method Completed6 (line 6113) | static void Completed6(object state)
      method Completed7 (line 6168) | static void Completed7(object state)
      method Completed8 (line 6223) | static void Completed8(object state)
      method Completed9 (line 6278) | static void Completed9(object state)
      method Completed10 (line 6333) | static void Completed10(object state)
      method Completed11 (line 6388) | static void Completed11(object state)
      method TrySetResult (line 6443) | bool TrySetResult()
      method DisposeAsync (line 6457) | public async UniTask DisposeAsync()
      method _CombineLatest (line 6656) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 6678) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 6869) | static void Completed1(object state)
      method Completed2 (line 6924) | static void Completed2(object state)
      method Completed3 (line 6979) | static void Completed3(object state)
      method Completed4 (line 7034) | static void Completed4(object state)
      method Completed5 (line 7089) | static void Completed5(object state)
      method Completed6 (line 7144) | static void Completed6(object state)
      method Completed7 (line 7199) | static void Completed7(object state)
      method Completed8 (line 7254) | static void Completed8(object state)
      method Completed9 (line 7309) | static void Completed9(object state)
      method Completed10 (line 7364) | static void Completed10(object state)
      method Completed11 (line 7419) | static void Completed11(object state)
      method Completed12 (line 7474) | static void Completed12(object state)
      method TrySetResult (line 7529) | bool TrySetResult()
      method DisposeAsync (line 7543) | public async UniTask DisposeAsync()
      method _CombineLatest (line 7756) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 7779) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 7984) | static void Completed1(object state)
      method Completed2 (line 8039) | static void Completed2(object state)
      method Completed3 (line 8094) | static void Completed3(object state)
      method Completed4 (line 8149) | static void Completed4(object state)
      method Completed5 (line 8204) | static void Completed5(object state)
      method Completed6 (line 8259) | static void Completed6(object state)
      method Completed7 (line 8314) | static void Completed7(object state)
      method Completed8 (line 8369) | static void Completed8(object state)
      method Completed9 (line 8424) | static void Completed9(object state)
      method Completed10 (line 8479) | static void Completed10(object state)
      method Completed11 (line 8534) | static void Completed11(object state)
      method Completed12 (line 8589) | static void Completed12(object state)
      method Completed13 (line 8644) | static void Completed13(object state)
      method TrySetResult (line 8699) | bool TrySetResult()
      method DisposeAsync (line 8713) | public async UniTask DisposeAsync()
      method _CombineLatest (line 8940) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 8964) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 9183) | static void Completed1(object state)
      method Completed2 (line 9238) | static void Completed2(object state)
      method Completed3 (line 9293) | static void Completed3(object state)
      method Completed4 (line 9348) | static void Completed4(object state)
      method Completed5 (line 9403) | static void Completed5(object state)
      method Completed6 (line 9458) | static void Completed6(object state)
      method Completed7 (line 9513) | static void Completed7(object state)
      method Completed8 (line 9568) | static void Completed8(object state)
      method Completed9 (line 9623) | static void Completed9(object state)
      method Completed10 (line 9678) | static void Completed10(object state)
      method Completed11 (line 9733) | static void Completed11(object state)
      method Completed12 (line 9788) | static void Completed12(object state)
      method Completed13 (line 9843) | static void Completed13(object state)
      method Completed14 (line 9898) | static void Completed14(object state)
      method TrySetResult (line 9953) | bool TrySetResult()
      method DisposeAsync (line 9967) | public async UniTask DisposeAsync()
      method _CombineLatest (line 10208) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 10233) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 10466) | static void Completed1(object state)
      method Completed2 (line 10521) | static void Completed2(object state)
      method Completed3 (line 10576) | static void Completed3(object state)
      method Completed4 (line 10631) | static void Completed4(object state)
      method Completed5 (line 10686) | static void Completed5(object state)
      method Completed6 (line 10741) | static void Completed6(object state)
      method Completed7 (line 10796) | static void Completed7(object state)
      method Completed8 (line 10851) | static void Completed8(object state)
      method Completed9 (line 10906) | static void Completed9(object state)
      method Completed10 (line 10961) | static void Completed10(object state)
      method Completed11 (line 11016) | static void Completed11(object state)
      method Completed12 (line 11071) | static void Completed12(object state)
      method Completed13 (line 11126) | static void Completed13(object state)
      method Completed14 (line 11181) | static void Completed14(object state)
      method Completed15 (line 11236) | static void Completed15(object state)
      method TrySetResult (line 11291) | bool TrySetResult()
      method DisposeAsync (line 11305) | public async UniTask DisposeAsync()
    method CombineLatest (line 821) | public CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskAsyn...
    method GetAsyncEnumerator (line 831) | public IUniTaskAsyncEnumerator<TResult> GetAsyncEnumerator(Cancellatio...
    class _CombineLatest (line 836) | class _CombineLatest : MoveNextSource, IUniTaskAsyncEnumerator<TResult>
      method _CombineLatest (line 276) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 288) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 339) | static void Completed1(object state)
      method Completed2 (line 394) | static void Completed2(object state)
      method TrySetResult (line 449) | bool TrySetResult()
      method DisposeAsync (line 463) | public async UniTask DisposeAsync()
      method _CombineLatest (line 536) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 549) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 614) | static void Completed1(object state)
      method Completed2 (line 669) | static void Completed2(object state)
      method Completed3 (line 724) | static void Completed3(object state)
      method TrySetResult (line 779) | bool TrySetResult()
      method DisposeAsync (line 793) | public async UniTask DisposeAsync()
      method _CombineLatest (line 880) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 894) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 973) | static void Completed1(object state)
      method Completed2 (line 1028) | static void Completed2(object state)
      method Completed3 (line 1083) | static void Completed3(object state)
      method Completed4 (line 1138) | static void Completed4(object state)
      method TrySetResult (line 1193) | bool TrySetResult()
      method DisposeAsync (line 1207) | public async UniTask DisposeAsync()
      method _CombineLatest (line 1308) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 1323) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 1416) | static void Completed1(object state)
      method Completed2 (line 1471) | static void Completed2(object state)
      method Completed3 (line 1526) | static void Completed3(object state)
      method Completed4 (line 1581) | static void Completed4(object state)
      method Completed5 (line 1636) | static void Completed5(object state)
      method TrySetResult (line 1691) | bool TrySetResult()
      method DisposeAsync (line 1705) | public async UniTask DisposeAsync()
      method _CombineLatest (line 1820) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 1836) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 1943) | static void Completed1(object state)
      method Completed2 (line 1998) | static void Completed2(object state)
      method Completed3 (line 2053) | static void Completed3(object state)
      method Completed4 (line 2108) | static void Completed4(object state)
      method Completed5 (line 2163) | static void Completed5(object state)
      method Completed6 (line 2218) | static void Completed6(object state)
      method TrySetResult (line 2273) | bool TrySetResult()
      method DisposeAsync (line 2287) | public async UniTask DisposeAsync()
      method _CombineLatest (line 2416) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 2433) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 2554) | static void Completed1(object state)
      method Completed2 (line 2609) | static void Completed2(object state)
      method Completed3 (line 2664) | static void Completed3(object state)
      method Completed4 (line 2719) | static void Completed4(object state)
      method Completed5 (line 2774) | static void Completed5(object state)
      method Completed6 (line 2829) | static void Completed6(object state)
      method Completed7 (line 2884) | static void Completed7(object state)
      method TrySetResult (line 2939) | bool TrySetResult()
      method DisposeAsync (line 2953) | public async UniTask DisposeAsync()
      method _CombineLatest (line 3096) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 3114) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 3249) | static void Completed1(object state)
      method Completed2 (line 3304) | static void Completed2(object state)
      method Completed3 (line 3359) | static void Completed3(object state)
      method Completed4 (line 3414) | static void Completed4(object state)
      method Completed5 (line 3469) | static void Completed5(object state)
      method Completed6 (line 3524) | static void Completed6(object state)
      method Completed7 (line 3579) | static void Completed7(object state)
      method Completed8 (line 3634) | static void Completed8(object state)
      method TrySetResult (line 3689) | bool TrySetResult()
      method DisposeAsync (line 3703) | public async UniTask DisposeAsync()
      method _CombineLatest (line 3860) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 3879) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 4028) | static void Completed1(object state)
      method Completed2 (line 4083) | static void Completed2(object state)
      method Completed3 (line 4138) | static void Completed3(object state)
      method Completed4 (line 4193) | static void Completed4(object state)
      method Completed5 (line 4248) | static void Completed5(object state)
      method Completed6 (line 4303) | static void Completed6(object state)
      method Completed7 (line 4358) | static void Completed7(object state)
      method Completed8 (line 4413) | static void Completed8(object state)
      method Completed9 (line 4468) | static void Completed9(object state)
      method TrySetResult (line 4523) | bool TrySetResult()
      method DisposeAsync (line 4537) | public async UniTask DisposeAsync()
      method _CombineLatest (line 4708) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 4728) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 4891) | static void Completed1(object state)
      method Completed2 (line 4946) | static void Completed2(object state)
      method Completed3 (line 5001) | static void Completed3(object state)
      method Completed4 (line 5056) | static void Completed4(object state)
      method Completed5 (line 5111) | static void Completed5(object state)
      method Completed6 (line 5166) | static void Completed6(object state)
      method Completed7 (line 5221) | static void Completed7(object state)
      method Completed8 (line 5276) | static void Completed8(object state)
      method Completed9 (line 5331) | static void Completed9(object state)
      method Completed10 (line 5386) | static void Completed10(object state)
      method TrySetResult (line 5441) | bool TrySetResult()
      method DisposeAsync (line 5455) | public async UniTask DisposeAsync()
      method _CombineLatest (line 5640) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 5661) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 5838) | static void Completed1(object state)
      method Completed2 (line 5893) | static void Completed2(object state)
      method Completed3 (line 5948) | static void Completed3(object state)
      method Completed4 (line 6003) | static void Completed4(object state)
      method Completed5 (line 6058) | static void Completed5(object state)
      method Completed6 (line 6113) | static void Completed6(object state)
      method Completed7 (line 6168) | static void Completed7(object state)
      method Completed8 (line 6223) | static void Completed8(object state)
      method Completed9 (line 6278) | static void Completed9(object state)
      method Completed10 (line 6333) | static void Completed10(object state)
      method Completed11 (line 6388) | static void Completed11(object state)
      method TrySetResult (line 6443) | bool TrySetResult()
      method DisposeAsync (line 6457) | public async UniTask DisposeAsync()
      method _CombineLatest (line 6656) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 6678) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 6869) | static void Completed1(object state)
      method Completed2 (line 6924) | static void Completed2(object state)
      method Completed3 (line 6979) | static void Completed3(object state)
      method Completed4 (line 7034) | static void Completed4(object state)
      method Completed5 (line 7089) | static void Completed5(object state)
      method Completed6 (line 7144) | static void Completed6(object state)
      method Completed7 (line 7199) | static void Completed7(object state)
      method Completed8 (line 7254) | static void Completed8(object state)
      method Completed9 (line 7309) | static void Completed9(object state)
      method Completed10 (line 7364) | static void Completed10(object state)
      method Completed11 (line 7419) | static void Completed11(object state)
      method Completed12 (line 7474) | static void Completed12(object state)
      method TrySetResult (line 7529) | bool TrySetResult()
      method DisposeAsync (line 7543) | public async UniTask DisposeAsync()
      method _CombineLatest (line 7756) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 7779) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 7984) | static void Completed1(object state)
      method Completed2 (line 8039) | static void Completed2(object state)
      method Completed3 (line 8094) | static void Completed3(object state)
      method Completed4 (line 8149) | static void Completed4(object state)
      method Completed5 (line 8204) | static void Completed5(object state)
      method Completed6 (line 8259) | static void Completed6(object state)
      method Completed7 (line 8314) | static void Completed7(object state)
      method Completed8 (line 8369) | static void Completed8(object state)
      method Completed9 (line 8424) | static void Completed9(object state)
      method Completed10 (line 8479) | static void Completed10(object state)
      method Completed11 (line 8534) | static void Completed11(object state)
      method Completed12 (line 8589) | static void Completed12(object state)
      method Completed13 (line 8644) | static void Completed13(object state)
      method TrySetResult (line 8699) | bool TrySetResult()
      method DisposeAsync (line 8713) | public async UniTask DisposeAsync()
      method _CombineLatest (line 8940) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 8964) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 9183) | static void Completed1(object state)
      method Completed2 (line 9238) | static void Completed2(object state)
      method Completed3 (line 9293) | static void Completed3(object state)
      method Completed4 (line 9348) | static void Completed4(object state)
      method Completed5 (line 9403) | static void Completed5(object state)
      method Completed6 (line 9458) | static void Completed6(object state)
      method Completed7 (line 9513) | static void Completed7(object state)
      method Completed8 (line 9568) | static void Completed8(object state)
      method Completed9 (line 9623) | static void Completed9(object state)
      method Completed10 (line 9678) | static void Completed10(object state)
      method Completed11 (line 9733) | static void Completed11(object state)
      method Completed12 (line 9788) | static void Completed12(object state)
      method Completed13 (line 9843) | static void Completed13(object state)
      method Completed14 (line 9898) | static void Completed14(object state)
      method TrySetResult (line 9953) | bool TrySetResult()
      method DisposeAsync (line 9967) | public async UniTask DisposeAsync()
      method _CombineLatest (line 10208) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 10233) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 10466) | static void Completed1(object state)
      method Completed2 (line 10521) | static void Completed2(object state)
      method Completed3 (line 10576) | static void Completed3(object state)
      method Completed4 (line 10631) | static void Completed4(object state)
      method Completed5 (line 10686) | static void Completed5(object state)
      method Completed6 (line 10741) | static void Completed6(object state)
      method Completed7 (line 10796) | static void Completed7(object state)
      method Completed8 (line 10851) | static void Completed8(object state)
      method Completed9 (line 10906) | static void Completed9(object state)
      method Completed10 (line 10961) | static void Completed10(object state)
      method Completed11 (line 11016) | static void Completed11(object state)
      method Completed12 (line 11071) | static void Completed12(object state)
      method Completed13 (line 11126) | static void Completed13(object state)
      method Completed14 (line 11181) | static void Completed14(object state)
      method Completed15 (line 11236) | static void Completed15(object state)
      method TrySetResult (line 11291) | bool TrySetResult()
      method DisposeAsync (line 11305) | public async UniTask DisposeAsync()
    method CombineLatest (line 1240) | public CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskAsyn...
    method GetAsyncEnumerator (line 1251) | public IUniTaskAsyncEnumerator<TResult> GetAsyncEnumerator(Cancellatio...
    class _CombineLatest (line 1256) | class _CombineLatest : MoveNextSource, IUniTaskAsyncEnumerator<TResult>
      method _CombineLatest (line 276) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 288) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 339) | static void Completed1(object state)
      method Completed2 (line 394) | static void Completed2(object state)
      method TrySetResult (line 449) | bool TrySetResult()
      method DisposeAsync (line 463) | public async UniTask DisposeAsync()
      method _CombineLatest (line 536) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 549) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 614) | static void Completed1(object state)
      method Completed2 (line 669) | static void Completed2(object state)
      method Completed3 (line 724) | static void Completed3(object state)
      method TrySetResult (line 779) | bool TrySetResult()
      method DisposeAsync (line 793) | public async UniTask DisposeAsync()
      method _CombineLatest (line 880) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 894) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 973) | static void Completed1(object state)
      method Completed2 (line 1028) | static void Completed2(object state)
      method Completed3 (line 1083) | static void Completed3(object state)
      method Completed4 (line 1138) | static void Completed4(object state)
      method TrySetResult (line 1193) | bool TrySetResult()
      method DisposeAsync (line 1207) | public async UniTask DisposeAsync()
      method _CombineLatest (line 1308) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 1323) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 1416) | static void Completed1(object state)
      method Completed2 (line 1471) | static void Completed2(object state)
      method Completed3 (line 1526) | static void Completed3(object state)
      method Completed4 (line 1581) | static void Completed4(object state)
      method Completed5 (line 1636) | static void Completed5(object state)
      method TrySetResult (line 1691) | bool TrySetResult()
      method DisposeAsync (line 1705) | public async UniTask DisposeAsync()
      method _CombineLatest (line 1820) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 1836) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 1943) | static void Completed1(object state)
      method Completed2 (line 1998) | static void Completed2(object state)
      method Completed3 (line 2053) | static void Completed3(object state)
      method Completed4 (line 2108) | static void Completed4(object state)
      method Completed5 (line 2163) | static void Completed5(object state)
      method Completed6 (line 2218) | static void Completed6(object state)
      method TrySetResult (line 2273) | bool TrySetResult()
      method DisposeAsync (line 2287) | public async UniTask DisposeAsync()
      method _CombineLatest (line 2416) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 2433) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 2554) | static void Completed1(object state)
      method Completed2 (line 2609) | static void Completed2(object state)
      method Completed3 (line 2664) | static void Completed3(object state)
      method Completed4 (line 2719) | static void Completed4(object state)
      method Completed5 (line 2774) | static void Completed5(object state)
      method Completed6 (line 2829) | static void Completed6(object state)
      method Completed7 (line 2884) | static void Completed7(object state)
      method TrySetResult (line 2939) | bool TrySetResult()
      method DisposeAsync (line 2953) | public async UniTask DisposeAsync()
      method _CombineLatest (line 3096) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 3114) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 3249) | static void Completed1(object state)
      method Completed2 (line 3304) | static void Completed2(object state)
      method Completed3 (line 3359) | static void Completed3(object state)
      method Completed4 (line 3414) | static void Completed4(object state)
      method Completed5 (line 3469) | static void Completed5(object state)
      method Completed6 (line 3524) | static void Completed6(object state)
      method Completed7 (line 3579) | static void Completed7(object state)
      method Completed8 (line 3634) | static void Completed8(object state)
      method TrySetResult (line 3689) | bool TrySetResult()
      method DisposeAsync (line 3703) | public async UniTask DisposeAsync()
      method _CombineLatest (line 3860) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 3879) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 4028) | static void Completed1(object state)
      method Completed2 (line 4083) | static void Completed2(object state)
      method Completed3 (line 4138) | static void Completed3(object state)
      method Completed4 (line 4193) | static void Completed4(object state)
      method Completed5 (line 4248) | static void Completed5(object state)
      method Completed6 (line 4303) | static void Completed6(object state)
      method Completed7 (line 4358) | static void Completed7(object state)
      method Completed8 (line 4413) | static void Completed8(object state)
      method Completed9 (line 4468) | static void Completed9(object state)
      method TrySetResult (line 4523) | bool TrySetResult()
      method DisposeAsync (line 4537) | public async UniTask DisposeAsync()
      method _CombineLatest (line 4708) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 4728) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 4891) | static void Completed1(object state)
      method Completed2 (line 4946) | static void Completed2(object state)
      method Completed3 (line 5001) | static void Completed3(object state)
      method Completed4 (line 5056) | static void Completed4(object state)
      method Completed5 (line 5111) | static void Completed5(object state)
      method Completed6 (line 5166) | static void Completed6(object state)
      method Completed7 (line 5221) | static void Completed7(object state)
      method Completed8 (line 5276) | static void Completed8(object state)
      method Completed9 (line 5331) | static void Completed9(object state)
      method Completed10 (line 5386) | static void Completed10(object state)
      method TrySetResult (line 5441) | bool TrySetResult()
      method DisposeAsync (line 5455) | public async UniTask DisposeAsync()
      method _CombineLatest (line 5640) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 5661) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 5838) | static void Completed1(object state)
      method Completed2 (line 5893) | static void Completed2(object state)
      method Completed3 (line 5948) | static void Completed3(object state)
      method Completed4 (line 6003) | static void Completed4(object state)
      method Completed5 (line 6058) | static void Completed5(object state)
      method Completed6 (line 6113) | static void Completed6(object state)
      method Completed7 (line 6168) | static void Completed7(object state)
      method Completed8 (line 6223) | static void Completed8(object state)
      method Completed9 (line 6278) | static void Completed9(object state)
      method Completed10 (line 6333) | static void Completed10(object state)
      method Completed11 (line 6388) | static void Completed11(object state)
      method TrySetResult (line 6443) | bool TrySetResult()
      method DisposeAsync (line 6457) | public async UniTask DisposeAsync()
      method _CombineLatest (line 6656) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 6678) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 6869) | static void Completed1(object state)
      method Completed2 (line 6924) | static void Completed2(object state)
      method Completed3 (line 6979) | static void Completed3(object state)
      method Completed4 (line 7034) | static void Completed4(object state)
      method Completed5 (line 7089) | static void Completed5(object state)
      method Completed6 (line 7144) | static void Completed6(object state)
      method Completed7 (line 7199) | static void Completed7(object state)
      method Completed8 (line 7254) | static void Completed8(object state)
      method Completed9 (line 7309) | static void Completed9(object state)
      method Completed10 (line 7364) | static void Completed10(object state)
      method Completed11 (line 7419) | static void Completed11(object state)
      method Completed12 (line 7474) | static void Completed12(object state)
      method TrySetResult (line 7529) | bool TrySetResult()
      method DisposeAsync (line 7543) | public async UniTask DisposeAsync()
      method _CombineLatest (line 7756) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 7779) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 7984) | static void Completed1(object state)
      method Completed2 (line 8039) | static void Completed2(object state)
      method Completed3 (line 8094) | static void Completed3(object state)
      method Completed4 (line 8149) | static void Completed4(object state)
      method Completed5 (line 8204) | static void Completed5(object state)
      method Completed6 (line 8259) | static void Completed6(object state)
      method Completed7 (line 8314) | static void Completed7(object state)
      method Completed8 (line 8369) | static void Completed8(object state)
      method Completed9 (line 8424) | static void Completed9(object state)
      method Completed10 (line 8479) | static void Completed10(object state)
      method Completed11 (line 8534) | static void Completed11(object state)
      method Completed12 (line 8589) | static void Completed12(object state)
      method Completed13 (line 8644) | static void Completed13(object state)
      method TrySetResult (line 8699) | bool TrySetResult()
      method DisposeAsync (line 8713) | public async UniTask DisposeAsync()
      method _CombineLatest (line 8940) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 8964) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 9183) | static void Completed1(object state)
      method Completed2 (line 9238) | static void Completed2(object state)
      method Completed3 (line 9293) | static void Completed3(object state)
      method Completed4 (line 9348) | static void Completed4(object state)
      method Completed5 (line 9403) | static void Completed5(object state)
      method Completed6 (line 9458) | static void Completed6(object state)
      method Completed7 (line 9513) | static void Completed7(object state)
      method Completed8 (line 9568) | static void Completed8(object state)
      method Completed9 (line 9623) | static void Completed9(object state)
      method Completed10 (line 9678) | static void Completed10(object state)
      method Completed11 (line 9733) | static void Completed11(object state)
      method Completed12 (line 9788) | static void Completed12(object state)
      method Completed13 (line 9843) | static void Completed13(object state)
      method Completed14 (line 9898) | static void Completed14(object state)
      method TrySetResult (line 9953) | bool TrySetResult()
      method DisposeAsync (line 9967) | public async UniTask DisposeAsync()
      method _CombineLatest (line 10208) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 10233) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 10466) | static void Completed1(object state)
      method Completed2 (line 10521) | static void Completed2(object state)
      method Completed3 (line 10576) | static void Completed3(object state)
      method Completed4 (line 10631) | static void Completed4(object state)
      method Completed5 (line 10686) | static void Completed5(object state)
      method Completed6 (line 10741) | static void Completed6(object state)
      method Completed7 (line 10796) | static void Completed7(object state)
      method Completed8 (line 10851) | static void Completed8(object state)
      method Completed9 (line 10906) | static void Completed9(object state)
      method Completed10 (line 10961) | static void Completed10(object state)
      method Completed11 (line 11016) | static void Completed11(object state)
      method Completed12 (line 11071) | static void Completed12(object state)
      method Completed13 (line 11126) | static void Completed13(object state)
      method Completed14 (line 11181) | static void Completed14(object state)
      method Completed15 (line 11236) | static void Completed15(object state)
      method TrySetResult (line 11291) | bool TrySetResult()
      method DisposeAsync (line 11305) | public async UniTask DisposeAsync()
    method CombineLatest (line 1743) | public CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskAsyn...
    method GetAsyncEnumerator (line 1755) | public IUniTaskAsyncEnumerator<TResult> GetAsyncEnumerator(Cancellatio...
    class _CombineLatest (line 1760) | class _CombineLatest : MoveNextSource, IUniTaskAsyncEnumerator<TResult>
      method _CombineLatest (line 276) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 288) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 339) | static void Completed1(object state)
      method Completed2 (line 394) | static void Completed2(object state)
      method TrySetResult (line 449) | bool TrySetResult()
      method DisposeAsync (line 463) | public async UniTask DisposeAsync()
      method _CombineLatest (line 536) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 549) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 614) | static void Completed1(object state)
      method Completed2 (line 669) | static void Completed2(object state)
      method Completed3 (line 724) | static void Completed3(object state)
      method TrySetResult (line 779) | bool TrySetResult()
      method DisposeAsync (line 793) | public async UniTask DisposeAsync()
      method _CombineLatest (line 880) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 894) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 973) | static void Completed1(object state)
      method Completed2 (line 1028) | static void Completed2(object state)
      method Completed3 (line 1083) | static void Completed3(object state)
      method Completed4 (line 1138) | static void Completed4(object state)
      method TrySetResult (line 1193) | bool TrySetResult()
      method DisposeAsync (line 1207) | public async UniTask DisposeAsync()
      method _CombineLatest (line 1308) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 1323) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 1416) | static void Completed1(object state)
      method Completed2 (line 1471) | static void Completed2(object state)
      method Completed3 (line 1526) | static void Completed3(object state)
      method Completed4 (line 1581) | static void Completed4(object state)
      method Completed5 (line 1636) | static void Completed5(object state)
      method TrySetResult (line 1691) | bool TrySetResult()
      method DisposeAsync (line 1705) | public async UniTask DisposeAsync()
      method _CombineLatest (line 1820) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 1836) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 1943) | static void Completed1(object state)
      method Completed2 (line 1998) | static void Completed2(object state)
      method Completed3 (line 2053) | static void Completed3(object state)
      method Completed4 (line 2108) | static void Completed4(object state)
      method Completed5 (line 2163) | static void Completed5(object state)
      method Completed6 (line 2218) | static void Completed6(object state)
      method TrySetResult (line 2273) | bool TrySetResult()
      method DisposeAsync (line 2287) | public async UniTask DisposeAsync()
      method _CombineLatest (line 2416) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 2433) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 2554) | static void Completed1(object state)
      method Completed2 (line 2609) | static void Completed2(object state)
      method Completed3 (line 2664) | static void Completed3(object state)
      method Completed4 (line 2719) | static void Completed4(object state)
      method Completed5 (line 2774) | static void Completed5(object state)
      method Completed6 (line 2829) | static void Completed6(object state)
      method Completed7 (line 2884) | static void Completed7(object state)
      method TrySetResult (line 2939) | bool TrySetResult()
      method DisposeAsync (line 2953) | public async UniTask DisposeAsync()
      method _CombineLatest (line 3096) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 3114) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 3249) | static void Completed1(object state)
      method Completed2 (line 3304) | static void Completed2(object state)
      method Completed3 (line 3359) | static void Completed3(object state)
      method Completed4 (line 3414) | static void Completed4(object state)
      method Completed5 (line 3469) | static void Completed5(object state)
      method Completed6 (line 3524) | static void Completed6(object state)
      method Completed7 (line 3579) | static void Completed7(object state)
      method Completed8 (line 3634) | static void Completed8(object state)
      method TrySetResult (line 3689) | bool TrySetResult()
      method DisposeAsync (line 3703) | public async UniTask DisposeAsync()
      method _CombineLatest (line 3860) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 3879) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 4028) | static void Completed1(object state)
      method Completed2 (line 4083) | static void Completed2(object state)
      method Completed3 (line 4138) | static void Completed3(object state)
      method Completed4 (line 4193) | static void Completed4(object state)
      method Completed5 (line 4248) | static void Completed5(object state)
      method Completed6 (line 4303) | static void Completed6(object state)
      method Completed7 (line 4358) | static void Completed7(object state)
      method Completed8 (line 4413) | static void Completed8(object state)
      method Completed9 (line 4468) | static void Completed9(object state)
      method TrySetResult (line 4523) | bool TrySetResult()
      method DisposeAsync (line 4537) | public async UniTask DisposeAsync()
      method _CombineLatest (line 4708) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 4728) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 4891) | static void Completed1(object state)
      method Completed2 (line 4946) | static void Completed2(object state)
      method Completed3 (line 5001) | static void Completed3(object state)
      method Completed4 (line 5056) | static void Completed4(object state)
      method Completed5 (line 5111) | static void Completed5(object state)
      method Completed6 (line 5166) | static void Completed6(object state)
      method Completed7 (line 5221) | static void Completed7(object state)
      method Completed8 (line 5276) | static void Completed8(object state)
      method Completed9 (line 5331) | static void Completed9(object state)
      method Completed10 (line 5386) | static void Completed10(object state)
      method TrySetResult (line 5441) | bool TrySetResult()
      method DisposeAsync (line 5455) | public async UniTask DisposeAsync()
      method _CombineLatest (line 5640) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 5661) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 5838) | static void Completed1(object state)
      method Completed2 (line 5893) | static void Completed2(object state)
      method Completed3 (line 5948) | static void Completed3(object state)
      method Completed4 (line 6003) | static void Completed4(object state)
      method Completed5 (line 6058) | static void Completed5(object state)
      method Completed6 (line 6113) | static void Completed6(object state)
      method Completed7 (line 6168) | static void Completed7(object state)
      method Completed8 (line 6223) | static void Completed8(object state)
      method Completed9 (line 6278) | static void Completed9(object state)
      method Completed10 (line 6333) | static void Completed10(object state)
      method Completed11 (line 6388) | static void Completed11(object state)
      method TrySetResult (line 6443) | bool TrySetResult()
      method DisposeAsync (line 6457) | public async UniTask DisposeAsync()
      method _CombineLatest (line 6656) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 6678) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 6869) | static void Completed1(object state)
      method Completed2 (line 6924) | static void Completed2(object state)
      method Completed3 (line 6979) | static void Completed3(object state)
      method Completed4 (line 7034) | static void Completed4(object state)
      method Completed5 (line 7089) | static void Completed5(object state)
      method Completed6 (line 7144) | static void Completed6(object state)
      method Completed7 (line 7199) | static void Completed7(object state)
      method Completed8 (line 7254) | static void Completed8(object state)
      method Completed9 (line 7309) | static void Completed9(object state)
      method Completed10 (line 7364) | static void Completed10(object state)
      method Completed11 (line 7419) | static void Completed11(object state)
      method Completed12 (line 7474) | static void Completed12(object state)
      method TrySetResult (line 7529) | bool TrySetResult()
      method DisposeAsync (line 7543) | public async UniTask DisposeAsync()
      method _CombineLatest (line 7756) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 7779) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 7984) | static void Completed1(object state)
      method Completed2 (line 8039) | static void Completed2(object state)
      method Completed3 (line 8094) | static void Completed3(object state)
      method Completed4 (line 8149) | static void Completed4(object state)
      method Completed5 (line 8204) | static void Completed5(object state)
      method Completed6 (line 8259) | static void Completed6(object state)
      method Completed7 (line 8314) | static void Completed7(object state)
      method Completed8 (line 8369) | static void Completed8(object state)
      method Completed9 (line 8424) | static void Completed9(object state)
      method Completed10 (line 8479) | static void Completed10(object state)
      method Completed11 (line 8534) | static void Completed11(object state)
      method Completed12 (line 8589) | static void Completed12(object state)
      method Completed13 (line 8644) | static void Completed13(object state)
      method TrySetResult (line 8699) | bool TrySetResult()
      method DisposeAsync (line 8713) | public async UniTask DisposeAsync()
      method _CombineLatest (line 8940) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 8964) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 9183) | static void Completed1(object state)
      method Completed2 (line 9238) | static void Completed2(object state)
      method Completed3 (line 9293) | static void Completed3(object state)
      method Completed4 (line 9348) | static void Completed4(object state)
      method Completed5 (line 9403) | static void Completed5(object state)
      method Completed6 (line 9458) | static void Completed6(object state)
      method Completed7 (line 9513) | static void Completed7(object state)
      method Completed8 (line 9568) | static void Completed8(object state)
      method Completed9 (line 9623) | static void Completed9(object state)
      method Completed10 (line 9678) | static void Completed10(object state)
      method Completed11 (line 9733) | static void Completed11(object state)
      method Completed12 (line 9788) | static void Completed12(object state)
      method Completed13 (line 9843) | static void Completed13(object state)
      method Completed14 (line 9898) | static void Completed14(object state)
      method TrySetResult (line 9953) | bool TrySetResult()
      method DisposeAsync (line 9967) | public async UniTask DisposeAsync()
      method _CombineLatest (line 10208) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 10233) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 10466) | static void Completed1(object state)
      method Completed2 (line 10521) | static void Completed2(object state)
      method Completed3 (line 10576) | static void Completed3(object state)
      method Completed4 (line 10631) | static void Completed4(object state)
      method Completed5 (line 10686) | static void Completed5(object state)
      method Completed6 (line 10741) | static void Completed6(object state)
      method Completed7 (line 10796) | static void Completed7(object state)
      method Completed8 (line 10851) | static void Completed8(object state)
      method Completed9 (line 10906) | static void Completed9(object state)
      method Completed10 (line 10961) | static void Completed10(object state)
      method Completed11 (line 11016) | static void Completed11(object state)
      method Completed12 (line 11071) | static void Completed12(object state)
      method Completed13 (line 11126) | static void Completed13(object state)
      method Completed14 (line 11181) | static void Completed14(object state)
      method Completed15 (line 11236) | static void Completed15(object state)
      method TrySetResult (line 11291) | bool TrySetResult()
      method DisposeAsync (line 11305) | public async UniTask DisposeAsync()
    method CombineLatest (line 2330) | public CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskAsyn...
    method GetAsyncEnumerator (line 2343) | public IUniTaskAsyncEnumerator<TResult> GetAsyncEnumerator(Cancellatio...
    class _CombineLatest (line 2348) | class _CombineLatest : MoveNextSource, IUniTaskAsyncEnumerator<TResult>
      method _CombineLatest (line 276) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 288) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 339) | static void Completed1(object state)
      method Completed2 (line 394) | static void Completed2(object state)
      method TrySetResult (line 449) | bool TrySetResult()
      method DisposeAsync (line 463) | public async UniTask DisposeAsync()
      method _CombineLatest (line 536) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 549) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 614) | static void Completed1(object state)
      method Completed2 (line 669) | static void Completed2(object state)
      method Completed3 (line 724) | static void Completed3(object state)
      method TrySetResult (line 779) | bool TrySetResult()
      method DisposeAsync (line 793) | public async UniTask DisposeAsync()
      method _CombineLatest (line 880) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 894) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 973) | static void Completed1(object state)
      method Completed2 (line 1028) | static void Completed2(object state)
      method Completed3 (line 1083) | static void Completed3(object state)
      method Completed4 (line 1138) | static void Completed4(object state)
      method TrySetResult (line 1193) | bool TrySetResult()
      method DisposeAsync (line 1207) | public async UniTask DisposeAsync()
      method _CombineLatest (line 1308) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 1323) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 1416) | static void Completed1(object state)
      method Completed2 (line 1471) | static void Completed2(object state)
      method Completed3 (line 1526) | static void Completed3(object state)
      method Completed4 (line 1581) | static void Completed4(object state)
      method Completed5 (line 1636) | static void Completed5(object state)
      method TrySetResult (line 1691) | bool TrySetResult()
      method DisposeAsync (line 1705) | public async UniTask DisposeAsync()
      method _CombineLatest (line 1820) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 1836) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 1943) | static void Completed1(object state)
      method Completed2 (line 1998) | static void Completed2(object state)
      method Completed3 (line 2053) | static void Completed3(object state)
      method Completed4 (line 2108) | static void Completed4(object state)
      method Completed5 (line 2163) | static void Completed5(object state)
      method Completed6 (line 2218) | static void Completed6(object state)
      method TrySetResult (line 2273) | bool TrySetResult()
      method DisposeAsync (line 2287) | public async UniTask DisposeAsync()
      method _CombineLatest (line 2416) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 2433) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 2554) | static void Completed1(object state)
      method Completed2 (line 2609) | static void Completed2(object state)
      method Completed3 (line 2664) | static void Completed3(object state)
      method Completed4 (line 2719) | static void Completed4(object state)
      method Completed5 (line 2774) | static void Completed5(object state)
      method Completed6 (line 2829) | static void Completed6(object state)
      method Completed7 (line 2884) | static void Completed7(object state)
      method TrySetResult (line 2939) | bool TrySetResult()
      method DisposeAsync (line 2953) | public async UniTask DisposeAsync()
      method _CombineLatest (line 3096) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 3114) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 3249) | static void Completed1(object state)
      method Completed2 (line 3304) | static void Completed2(object state)
      method Completed3 (line 3359) | static void Completed3(object state)
      method Completed4 (line 3414) | static void Completed4(object state)
      method Completed5 (line 3469) | static void Completed5(object state)
      method Completed6 (line 3524) | static void Completed6(object state)
      method Completed7 (line 3579) | static void Completed7(object state)
      method Completed8 (line 3634) | static void Completed8(object state)
      method TrySetResult (line 3689) | bool TrySetResult()
      method DisposeAsync (line 3703) | public async UniTask DisposeAsync()
      method _CombineLatest (line 3860) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 3879) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 4028) | static void Completed1(object state)
      method Completed2 (line 4083) | static void Completed2(object state)
      method Completed3 (line 4138) | static void Completed3(object state)
      method Completed4 (line 4193) | static void Completed4(object state)
      method Completed5 (line 4248) | static void Completed5(object state)
      method Completed6 (line 4303) | static void Completed6(object state)
      method Completed7 (line 4358) | static void Completed7(object state)
      method Completed8 (line 4413) | static void Completed8(object state)
      method Completed9 (line 4468) | static void Completed9(object state)
      method TrySetResult (line 4523) | bool TrySetResult()
      method DisposeAsync (line 4537) | public async UniTask DisposeAsync()
      method _CombineLatest (line 4708) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 4728) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 4891) | static void Completed1(object state)
      method Completed2 (line 4946) | static void Completed2(object state)
      method Completed3 (line 5001) | static void Completed3(object state)
      method Completed4 (line 5056) | static void Completed4(object state)
      method Completed5 (line 5111) | static void Completed5(object state)
      method Completed6 (line 5166) | static void Completed6(object state)
      method Completed7 (line 5221) | static void Completed7(object state)
      method Completed8 (line 5276) | static void Completed8(object state)
      method Completed9 (line 5331) | static void Completed9(object state)
      method Completed10 (line 5386) | static void Completed10(object state)
      method TrySetResult (line 5441) | bool TrySetResult()
      method DisposeAsync (line 5455) | public async UniTask DisposeAsync()
      method _CombineLatest (line 5640) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 5661) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 5838) | static void Completed1(object state)
      method Completed2 (line 5893) | static void Completed2(object state)
      method Completed3 (line 5948) | static void Completed3(object state)
      method Completed4 (line 6003) | static void Completed4(object state)
      method Completed5 (line 6058) | static void Completed5(object state)
      method Completed6 (line 6113) | static void Completed6(object state)
      method Completed7 (line 6168) | static void Completed7(object state)
      method Completed8 (line 6223) | static void Completed8(object state)
      method Completed9 (line 6278) | static void Completed9(object state)
      method Completed10 (line 6333) | static void Completed10(object state)
      method Completed11 (line 6388) | static void Completed11(object state)
      method TrySetResult (line 6443) | bool TrySetResult()
      method DisposeAsync (line 6457) | public async UniTask DisposeAsync()
      method _CombineLatest (line 6656) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 6678) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 6869) | static void Completed1(object state)
      method Completed2 (line 6924) | static void Completed2(object state)
      method Completed3 (line 6979) | static void Completed3(object state)
      method Completed4 (line 7034) | static void Completed4(object state)
      method Completed5 (line 7089) | static void Completed5(object state)
      method Completed6 (line 7144) | static void Completed6(object state)
      method Completed7 (line 7199) | static void Completed7(object state)
      method Completed8 (line 7254) | static void Completed8(object state)
      method Completed9 (line 7309) | static void Completed9(object state)
      method Completed10 (line 7364) | static void Completed10(object state)
      method Completed11 (line 7419) | static void Completed11(object state)
      method Completed12 (line 7474) | static void Completed12(object state)
      method TrySetResult (line 7529) | bool TrySetResult()
      method DisposeAsync (line 7543) | public async UniTask DisposeAsync()
      method _CombineLatest (line 7756) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 7779) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 7984) | static void Completed1(object state)
      method Completed2 (line 8039) | static void Completed2(object state)
      method Completed3 (line 8094) | static void Completed3(object state)
      method Completed4 (line 8149) | static void Completed4(object state)
      method Completed5 (line 8204) | static void Completed5(object state)
      method Completed6 (line 8259) | static void Completed6(object state)
      method Completed7 (line 8314) | static void Completed7(object state)
      method Completed8 (line 8369) | static void Completed8(object state)
      method Completed9 (line 8424) | static void Completed9(object state)
      method Completed10 (line 8479) | static void Completed10(object state)
      method Completed11 (line 8534) | static void Completed11(object state)
      method Completed12 (line 8589) | static void Completed12(object state)
      method Completed13 (line 8644) | static void Completed13(object state)
      method TrySetResult (line 8699) | bool TrySetResult()
      method DisposeAsync (line 8713) | public async UniTask DisposeAsync()
      method _CombineLatest (line 8940) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 8964) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 9183) | static void Completed1(object state)
      method Completed2 (line 9238) | static void Completed2(object state)
      method Completed3 (line 9293) | static void Completed3(object state)
      method Completed4 (line 9348) | static void Completed4(object state)
      method Completed5 (line 9403) | static void Completed5(object state)
      method Completed6 (line 9458) | static void Completed6(object state)
      method Completed7 (line 9513) | static void Completed7(object state)
      method Completed8 (line 9568) | static void Completed8(object state)
      method Completed9 (line 9623) | static void Completed9(object state)
      method Completed10 (line 9678) | static void Completed10(object state)
      method Completed11 (line 9733) | static void Completed11(object state)
      method Completed12 (line 9788) | static void Completed12(object state)
      method Completed13 (line 9843) | static void Completed13(object state)
      method Completed14 (line 9898) | static void Completed14(object state)
      method TrySetResult (line 9953) | bool TrySetResult()
      method DisposeAsync (line 9967) | public async UniTask DisposeAsync()
      method _CombineLatest (line 10208) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 10233) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 10466) | static void Completed1(object state)
      method Completed2 (line 10521) | static void Completed2(object state)
      method Completed3 (line 10576) | static void Completed3(object state)
      method Completed4 (line 10631) | static void Completed4(object state)
      method Completed5 (line 10686) | static void Completed5(object state)
      method Completed6 (line 10741) | static void Completed6(object state)
      method Completed7 (line 10796) | static void Completed7(object state)
      method Completed8 (line 10851) | static void Completed8(object state)
      method Completed9 (line 10906) | static void Completed9(object state)
      method Completed10 (line 10961) | static void Completed10(object state)
      method Completed11 (line 11016) | static void Completed11(object state)
      method Completed12 (line 11071) | static void Completed12(object state)
      method Completed13 (line 11126) | static void Completed13(object state)
      method Completed14 (line 11181) | static void Completed14(object state)
      method Completed15 (line 11236) | static void Completed15(object state)
      method TrySetResult (line 11291) | bool TrySetResult()
      method DisposeAsync (line 11305) | public async UniTask DisposeAsync()
    method CombineLatest (line 3001) | public CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskAsyn...
    method GetAsyncEnumerator (line 3015) | public IUniTaskAsyncEnumerator<TResult> GetAsyncEnumerator(Cancellatio...
    class _CombineLatest (line 3020) | class _CombineLatest : MoveNextSource, IUniTaskAsyncEnumerator<TResult>
      method _CombineLatest (line 276) | public _CombineLatest(IUniTaskAsyncEnumerable<T1> source1, IUniTaskA...
      method MoveNextAsync (line 288) | public UniTask<bool> MoveNextAsync()
      method Completed1 (line 339) | static void Completed1(object state)
      method Completed2 (line 394) | static void Completed2(object state)
      method TrySetResult (line 449) | bool TrySetResult()
      method DisposeAsync (line 463) | public async UniTask DisposeAsync()
      method _CombineLatest (line 536) | public 
Condensed preview — 511 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,429K chars).
[
  {
    "path": ".config/dotnet-tools.json",
    "chars": 175,
    "preview": "{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"docfx\": {\n      \"version\": \"2.78.3\",\n      \"commands\": [\n        \""
  },
  {
    "path": ".editorconfig",
    "chars": 1127,
    "preview": "# top-most EditorConfig file\nroot = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_style = space\nindent_size = 2\nins"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 17,
    "preview": "github: [neuecc]\n"
  },
  {
    "path": ".github/dependabot.yaml",
    "chars": 726,
    "preview": "# ref: https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-"
  },
  {
    "path": ".github/workflows/build-debug.yaml",
    "chars": 3872,
    "preview": "name: Build-Debug\n\non:\n  push:\n    branches:\n      - \"master\"\n  pull_request:\n    branches:\n      - \"master\"\n\njobs:\n  bu"
  },
  {
    "path": ".github/workflows/build-docs.yaml",
    "chars": 2402,
    "preview": "name: build-docs\n\non:\n  push:\n    branches:\n      - master\n      - feature/docs\n\njobs:\n  run-docfx:\n    if: ${{ ((github"
  },
  {
    "path": ".github/workflows/build-release.yaml",
    "chars": 4439,
    "preview": "name: build-release\n\non:\n  workflow_dispatch:\n    inputs:\n      tag:\n        description: \"tag: git tag you want create."
  },
  {
    "path": ".github/workflows/prevent-github-change.yaml",
    "chars": 245,
    "preview": "name: Prevent github change\non:\n  pull_request:\n    paths:\n      - \".github/**/*.yaml\"\n      - \".github/**/*.yml\"\n\njobs:"
  },
  {
    "path": ".github/workflows/stale.yaml",
    "chars": 256,
    "preview": "name: \"Close stale issues\"\n\non:\n  workflow_dispatch:\n  schedule:\n    - cron: \"0 0 * * *\"\n\njobs:\n  stale:\n    permissions"
  },
  {
    "path": ".github/workflows/toc.yaml",
    "chars": 256,
    "preview": "name: TOC Generator\n\non:\n  push:\n    paths:\n      - 'README.md'\n\njobs:\n  toc:\n    permissions:\n      contents: write\n   "
  },
  {
    "path": ".gitignore",
    "chars": 2409,
    "preview": "# Unity\n\n*.pidb\n*.suo\n*.userprefs\n*.vsmdi\n*.testsettings\n*/bin\n*/obj\n*/publish\n$tf\nTestResults\n!*.sln\n!*.csproj\n!*/*.csp"
  },
  {
    "path": "Directory.Build.props",
    "chars": 1191,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "LICENSE",
    "chars": 1098,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2019 Yoshifumi Kawai / Cysharp, Inc.\n\nPermission is hereby granted, free of charge,"
  },
  {
    "path": "README.md",
    "chars": 53305,
    "preview": "UniTask\n===\n[![GitHub Actions](https://github.com/Cysharp/UniTask/workflows/Build-Debug/badge.svg)](https://github.com/C"
  },
  {
    "path": "README_CN.md",
    "chars": 42169,
    "preview": "UniTask\n===\n[![GitHub Actions](https://github.com/Cysharp/UniTask/workflows/Build-Debug/badge.svg)](https://github.com/C"
  },
  {
    "path": "UniTask.NetCore.sln",
    "chars": 2656,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.0.3160"
  },
  {
    "path": "docs/.gitignore",
    "chars": 120,
    "preview": "###############\n#    folder   #\n###############\n/**/DROP/\n/**/TEMP/\n/**/packages/\n/**/bin/\n/**/obj/\n_site\n_DocfxTemplate"
  },
  {
    "path": "docs/api/.gitignore",
    "chars": 64,
    "preview": "###############\n#  temp file  #\n###############\n*.yml\n.manifest\n"
  },
  {
    "path": "docs/docfx.json",
    "chars": 1451,
    "preview": "{\n  \"metadata\": [\n    {\n      \"src\": [\n        {\n          \"files\": [\n            \"UniTask/Library/ScriptAssemblies/UniT"
  },
  {
    "path": "docs/index.md",
    "chars": 123,
    "preview": "---\ntitle: Home\n---\n# UniTask\n\nProvides an efficient async/await integration to Unity.\n\nhttps://github.com/Cysharp/UniTa"
  },
  {
    "path": "docs/toc.yml",
    "chars": 319,
    "preview": "- name: API Documentation\n  href: api/\n  homepage: api/Cysharp.Threading.Tasks.html\n\n- name: Repository\n  href: https://"
  },
  {
    "path": "src/UniTask/Assets/Editor/EditorRunnerChecker.cs",
    "chars": 690,
    "preview": "#if UNITY_EDITOR\n\nusing Cysharp.Threading.Tasks;\nusing System;\nusing System.IO;\nusing System.Linq;\nusing UnityEditor;\nu"
  },
  {
    "path": "src/UniTask/Assets/Editor/EditorRunnerChecker.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: e51b78c06cb410f42b36e0af9de3b065\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Editor/PackageExporter.cs",
    "chars": 2293,
    "preview": "#if UNITY_EDITOR\n\nusing System;\nusing System.IO;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\n\npublic stati"
  },
  {
    "path": "src/UniTask/Assets/Editor/PackageExporter.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: af97405af79afbb4e9f7f49f30088474\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Editor.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: 99c8676e874bf0343b421d3527868f16\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Editor/SplitterGUILayout.cs",
    "chars": 2350,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System.L"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Editor/SplitterGUILayout.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 40ef2e46f900131419e869398a8d3c9d\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Editor/UniTask.Editor.asmdef",
    "chars": 368,
    "preview": "{\n    \"name\": \"UniTask.Editor\",\n    \"references\": [\n        \"UniTask\"\n    ],\n    \"includePlatforms\": [\n        \"Editor\"\n"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Editor/UniTask.Editor.asmdef.meta",
    "chars": 166,
    "preview": "fileFormatVersion: 2\nguid: 4129704b5a1a13841ba16f230bf24a57\nAssemblyDefinitionImporter:\n  externalObjects: {}\n  userData"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Editor/UniTaskTrackerTreeView.cs",
    "chars": 6755,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing UnityEngine;\nusing Uni"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Editor/UniTaskTrackerTreeView.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 52e2d973a2156674e8c1c9433ed031f7\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Editor/UniTaskTrackerWindow.cs",
    "chars": 7519,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing UnityEngine;\nusing Uni"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Editor/UniTaskTrackerWindow.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 5bee3e3860e37484aa3b861bf76d129f\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Editor.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: 275b87293edc6634f9d72387851dbbdf\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncLazy.cs",
    "chars": 6628,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System.T"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncLazy.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 01d1404ca421466419a7db7340ff5e77\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncReactiveProperty.cs",
    "chars": 20323,
    "preview": "using System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks\n{\n    public interface IReadOnlyAsyncReactiveP"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncReactiveProperty.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 8ef320b87f537ee4fb2282e765dc6166\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncUnit.cs",
    "chars": 543,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or \n\nusing System;\n\nnamespace Cysharp.T"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncUnit.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 4f95ac245430d304bb5128d13b6becc8\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenEqualityComparer.cs",
    "chars": 646,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System.Collections.Gen"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenEqualityComparer.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 7d739f510b125b74fa7290ac4335e46e\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenExtensions.cs",
    "chars": 5693,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System.R"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 4be7209f04146bd45ac5ee775a5f7c26\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenSourceExtensions.cs",
    "chars": 1900,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System.Threading;\nusin"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenSourceExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 22d85d07f1e70ab42a7a4c25bd65e661\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Channel.cs",
    "chars": 15697,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks\n{\n    public"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Channel.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 5ceb3107bbdd1f14eb39091273798360\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncMethodBuilderAttribute.cs",
    "chars": 411,
    "preview": "\n#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n#pragma warning disable CS04"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncMethodBuilderAttribute.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 02ce354d37b10454e8376062f7cbe57a\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncUniTaskMethodBuilder.cs",
    "chars": 7817,
    "preview": "\n#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System."
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncUniTaskMethodBuilder.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 68d72a45afdec574ebc26e7de2c38330\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncUniTaskVoidMethodBuilder.cs",
    "chars": 4017,
    "preview": "\n#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System."
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncUniTaskVoidMethodBuilder.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: e891aaac17b933a47a9d7fa3b8e1226f\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/StateMachineRunner.cs",
    "chars": 10526,
    "preview": "#pragma warning disable CS1591\n\nusing Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Linq;\nusing System.D"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices/StateMachineRunner.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 98649642833cabf44a9dc060ce4c84a1\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/CompilerServices.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: 64b064347ca7a404494a996b072e2e29\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/EnumerableAsyncExtensions.cs",
    "chars": 1146,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System.C"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/EnumerableAsyncExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: ff50260d74bd54c4b92cf99895549445\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/EnumeratorAsyncExtensions.cs",
    "chars": 10067,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System.C"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/EnumeratorAsyncExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: bc661232f11e4a741af54ba1c175d5ee\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/ExceptionExtensions.cs",
    "chars": 274,
    "preview": "\nusing System;\n\nnamespace Cysharp.Threading.Tasks\n{\n    public static class ExceptionExtensions\n    {\n        public st"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/ExceptionExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 930800098504c0d46958ce23a0495202\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/AddressablesAsyncExtensions.cs",
    "chars": 17719,
    "preview": "// asmdef Version Defines, enabled when com.unity.addressables is imported.\n\n#if UNITASK_ADDRESSABLE_SUPPORT\n\nusing Cys"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/AddressablesAsyncExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 3dc6441f9094f354b931dc3c79fb99e5\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/UniTask.Addressables.asmdef",
    "chars": 713,
    "preview": "{\n    \"name\": \"UniTask.Addressables\",\n    \"references\": [\n        \"UniTask\",\n        \"Unity.ResourceManager\",\n        \"U"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables/UniTask.Addressables.asmdef.meta",
    "chars": 166,
    "preview": "fileFormatVersion: 2\nguid: 593a5b492d29ac6448b1ebf7f035ef33\nAssemblyDefinitionImporter:\n  externalObjects: {}\n  userData"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/Addressables.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: a5b9231662e24c942b544bd85d4b39cb\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/DOTweenAsyncExtensions.cs",
    "chars": 17099,
    "preview": "// asmdef Version Defines, enabled when com.demigiant.dotween is imported.\n\n#if UNITASK_DOTWEEN_SUPPORT\n\nusing Cysharp."
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/DOTweenAsyncExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 1f448d5bc5b232e4f98d89d5d1832e8e\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/UniTask.DOTween.asmdef",
    "chars": 521,
    "preview": "{\n    \"name\": \"UniTask.DOTween\",\n    \"references\": [\n        \"UniTask\",\n        \"DOTween.Modules\"\n    ],\n    \"includePla"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween/UniTask.DOTween.asmdef.meta",
    "chars": 166,
    "preview": "fileFormatVersion: 2\nguid: 029c1c1b674aaae47a6841a0b89ad80e\nAssemblyDefinitionImporter:\n  externalObjects: {}\n  userData"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/DOTween.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: 25cb2f742bfeb1d48a4e65d3140b955d\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/TextMeshProAsyncExtensions.InputField.cs",
    "chars": 12310,
    "preview": "#if UNITASK_TEXTMESHPRO_SUPPORT\n\nusing System;\nusing System.Threading;\nusing TMPro;\n\nnamespace Cysharp.Threading.Tasks\n"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/TextMeshProAsyncExtensions.InputField.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 79f4f2475e0b2c44e97ed1dee760627b\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/TextMeshProAsyncExtensions.InputField.tt",
    "chars": 2767,
    "preview": "<#@ template debug=\"false\" hostspecific=\"false\" language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespac"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/TextMeshProAsyncExtensions.InputField.tt.meta",
    "chars": 155,
    "preview": "fileFormatVersion: 2\nguid: e9bb9fc551a975d44a7180e022a2debe\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetB"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/TextMeshProAsyncExtensions.cs",
    "chars": 4174,
    "preview": "#if UNITASK_TEXTMESHPRO_SUPPORT\n\nusing System;\nusing System.Threading;\nusing TMPro;\nusing UnityEngine.Events;\n\nnamespac"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/TextMeshProAsyncExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: b6ba480edafb67d4e91bb10feb64fae5\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/UniTask.TextMeshPro.asmdef",
    "chars": 678,
    "preview": "{\n    \"name\": \"UniTask.TextMeshPro\",\n    \"references\": [\n        \"UniTask\",\n        \"Unity.TextMeshPro\"\n    ],\n    \"incl"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro/UniTask.TextMeshPro.asmdef.meta",
    "chars": 166,
    "preview": "fileFormatVersion: 2\nguid: dc47925d1a5fa2946bdd37746b2b5d48\nAssemblyDefinitionImporter:\n  externalObjects: {}\n  userData"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External/TextMeshPro.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: f89da606bde9a4e4e94ae1189a029887\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/External.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: a3e874acee8398745b1dc3eddac09eaa\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/IUniTaskAsyncEnumerable.cs",
    "chars": 3088,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing System.Threading;\n\nnamespac"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/IUniTaskAsyncEnumerable.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: b20cf9f02ac585948a4372fa4ee06504\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/IUniTaskSource.cs",
    "chars": 4277,
    "preview": "#pragma warning disable CS1591\n#pragma warning disable CS0108\n\n#if (UNITASK_NETCORE && !NETSTANDARD2_0) || UNITY_2022_3"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/IUniTaskSource.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 3e4d023d8404ab742b5e808c98097c3c\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ArrayPool.cs",
    "chars": 4070,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System.T"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ArrayPool.cs.meta",
    "chars": 263,
    "preview": "fileFormatVersion: 2\nguid: f83ebad81fb89fb4882331616ca6d248\ntimeCreated: 1532361008\nlicenseType: Free\nMonoImporter:\n  se"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ArrayPoolUtil.cs",
    "chars": 3510,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System.C"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ArrayPoolUtil.cs.meta",
    "chars": 263,
    "preview": "fileFormatVersion: 2\nguid: 424cc208fb61d4e448b08fcfa0eee25e\ntimeCreated: 1532361007\nlicenseType: Free\nMonoImporter:\n  se"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ArrayUtil.cs",
    "chars": 2139,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System.C"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ArrayUtil.cs.meta",
    "chars": 263,
    "preview": "fileFormatVersion: 2\nguid: 23146a82ec99f2542a87971c8d3d7988\ntimeCreated: 1532361007\nlicenseType: Free\nMonoImporter:\n  se"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ContinuationQueue.cs",
    "chars": 6961,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System.T"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ContinuationQueue.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: f66c32454e50f2546b17deadc80a4c77\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/DiagnosticsExtensions.cs",
    "chars": 8908,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System.C"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/DiagnosticsExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: f80fb1c9ed4c99447be1b0a47a8d980b\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/Error.cs",
    "chars": 2644,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System.R"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/Error.cs.meta",
    "chars": 263,
    "preview": "fileFormatVersion: 2\nguid: 5f39f495294d4604b8082202faf98554\ntimeCreated: 1532361007\nlicenseType: Free\nMonoImporter:\n  se"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/MinimumQueue.cs",
    "chars": 2891,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System.R"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/MinimumQueue.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 7d63add489ccc99498114d79702b904d\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/PlayerLoopRunner.cs",
    "chars": 8192,
    "preview": "\nusing System;\nusing UnityEngine;\n\nnamespace Cysharp.Threading.Tasks.Internal\n{\n    internal sealed class PlayerLoopRun"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/PlayerLoopRunner.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 340c6d420bb4f484aa8683415ea92571\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/PooledDelegate.cs",
    "chars": 1267,
    "preview": "using System;\nusing System.Runtime.CompilerServices;\n\nnamespace Cysharp.Threading.Tasks.Internal\n{\n    internal sealed "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/PooledDelegate.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 8932579438742fa40b010edd412dbfba\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/RuntimeHelpersAbstraction.cs",
    "chars": 2199,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\n#if UNITY_2018"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/RuntimeHelpersAbstraction.cs.meta",
    "chars": 263,
    "preview": "fileFormatVersion: 2\nguid: 94975e4d4e0c0ea4ba787d3872ce9bb4\ntimeCreated: 1532361007\nlicenseType: Free\nMonoImporter:\n  se"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/StatePool.cs",
    "chars": 4174,
    "preview": "using System;\nusing System.Collections.Concurrent;\nusing System.Runtime.CompilerServices;\n\nnamespace Cysharp.Threading."
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/StatePool.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 60cdf0bcaea36b444a7ae7263ae7598f\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/TaskTracker.cs",
    "chars": 5932,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System.C"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/TaskTracker.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: a203c73eb4ccdbb44bddfd82d38fdda9\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/UnityEqualityComparer.cs",
    "chars": 11023,
    "preview": "using System;\nusing System.Collections.Generic;\nusing UnityEngine;\n\nnamespace Cysharp.Threading.Tasks.Internal\n{\n    in"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/UnityEqualityComparer.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: ebaaf14253c9cfb47b23283218ff9b67\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/UnityWebRequestExtensions.cs",
    "chars": 838,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/UnityWebRequestExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 111ba0e639de1d7428af6c823ead4918\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ValueStopwatch.cs",
    "chars": 1075,
    "preview": "using System;\nusing System.Diagnostics;\n\nnamespace Cysharp.Threading.Tasks.Internal\n{\n    internal readonly struct Valu"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ValueStopwatch.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: f16fb466974ad034c8732c79c7fd67ea\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/WeakDictionary.cs",
    "chars": 9620,
    "preview": "#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n\nusing System;\nusing System.C"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/WeakDictionary.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 6c78563864409714593226af59bcb6f3\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Internal.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: 633f49a8aafb6fa43894cd4646c71743\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Aggregate.cs",
    "chars": 13224,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\n\nnamesp"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Aggregate.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 5dc68c05a4228c643937f6ebd185bcca\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/All.cs",
    "chars": 3803,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/All.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 7271437e0033af2448b600ee248924dd\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Any.cs",
    "chars": 4677,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Any.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: e2b2e65745263994fbe34f3e0ec8eb12\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/AppendPrepend.cs",
    "chars": 5017,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/AppendPrepend.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 3268ec424b8055f45aa2a26d17c80468\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/AsUniTaskAsyncEnumerable.cs",
    "chars": 293,
    "preview": "namespace Cysharp.Threading.Tasks.Linq\n{\n    public static partial class UniTaskAsyncEnumerable\n    {\n        public st"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/AsUniTaskAsyncEnumerable.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 69866e262589ea643bbc62a1d696077a\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/AsyncEnumeratorBase.cs",
    "chars": 11314,
    "preview": "using System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{\n    // note: refactor all inherit class"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/AsyncEnumeratorBase.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 01ba1d3b17e13fb4c95740131c7e6e19\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Average.cs",
    "chars": 52363,
    "preview": "using System;\nusing System.Threading;\nusing Cysharp.Threading.Tasks.Internal;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Average.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 58499f95012fb3c47bb7bcbc5862e562\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Average.tt",
    "chars": 8060,
    "preview": "<#@ template debug=\"false\" hostspecific=\"false\" language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespac"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Average.tt.meta",
    "chars": 155,
    "preview": "fileFormatVersion: 2\nguid: 84bce45768c171d4490153eb08630a98\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetB"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Buffer.cs",
    "chars": 11544,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\n\nnamesp"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Buffer.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 951310243334a3148a7872977cb31c5c\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Cast.cs",
    "chars": 1532,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Cast.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: edebeae8b61352b428abe9ce8f3fc71a\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/CombineLatest.cs",
    "chars": 441189,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/CombineLatest.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 6cb07f6e88287e34d9b9301a572284a5\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/CombineLatest.tt",
    "chars": 7917,
    "preview": "<#@ template debug=\"false\" hostspecific=\"false\" language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespac"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/CombineLatest.tt.meta",
    "chars": 155,
    "preview": "fileFormatVersion: 2\nguid: b1b8cfa9d17af814a971ee2224aaaaa2\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetB"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Concat.cs",
    "chars": 5445,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Concat.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 7cb9e19c449127a459851a135ce7d527\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Contains.cs",
    "chars": 1765,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\n\nnamesp"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Contains.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 36ab06d30f3223048b4f676e05431a7f\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Count.cs",
    "chars": 4830,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Count.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: e606d38eed688574bb2ba89d983cc9bb\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Create.cs",
    "chars": 5590,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Create.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 0202f723469f93945afa063bfb440d15\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/DefaultIfEmpty.cs",
    "chars": 4742,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/DefaultIfEmpty.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 19e437c039ad7e1478dbce1779ef8660\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Distinct.cs",
    "chars": 11094,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\n\nnamesp"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Distinct.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 8f09903be66e5d943b243d7c19cb3811\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/DistinctUntilChanged.cs",
    "chars": 26360,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\n\nnamesp"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/DistinctUntilChanged.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 0351f6767df7e644b935d4d599968162\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Do.cs",
    "chars": 9992,
    "preview": "using Cysharp.Threading.Tasks;\nusing Cysharp.Threading.Tasks.Internal;\nusing Cysharp.Threading.Tasks.Linq;\nusing System"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Do.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: dd83c8e12dedf75409b829b93146d130\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ElementAt.cs",
    "chars": 1871,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ElementAt.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: c835bd2dd8555234c8919c7b8ef3b69a\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Empty.cs",
    "chars": 1115,
    "preview": "using System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{\n    public static partial class UniTaskAsyncEnumerabl"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Empty.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 4fa123ad6258abb4184721b719a13810\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Except.cs",
    "chars": 4069,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\n\nnamesp"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Except.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 38c1c4129f59dcb49a5b864eaf4ec63c\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/First.cs",
    "chars": 7472,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/First.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 417946e97e9eed84db6f840f57037ca6\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ForEach.cs",
    "chars": 7828,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/ForEach.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: ca8d7f8177ba16140920af405aea3fd4\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/GroupBy.cs",
    "chars": 45001,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/GroupBy.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: a2de80df1cc8a1240ab0ee7badd334d0\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/GroupJoin.cs",
    "chars": 27536,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/GroupJoin.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 7bf7759d03bf3f64190d3ae83b182c2c\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Intersect.cs",
    "chars": 4103,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\n\nnamesp"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Intersect.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 93999a70f5d57134bbe971f3e988c4f2\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Join.cs",
    "chars": 30718,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Join.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: dc4ff8cb6d7c9a64896f2f082124d6b3\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Last.cs",
    "chars": 8540,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Last.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: a0ccc93be1387fa4a975f06310127c11\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/LongCount.cs",
    "chars": 4902,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/LongCount.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 198b39e58ced3ab4f97ccbe0916787d5\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Max.cs",
    "chars": 6364,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing Cysharp.Threading.Tasks.Internal;\n\nnamesp"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Max.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 5c8a118a6b664c441820b8a87d7f6e28\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Merge.cs",
    "chars": 8332,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing Cysharp.Threading.Tasks"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Merge.cs.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: ca56812f160c45d0bacb4339819edf1a\ntimeCreated: 1694133666"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Min.cs",
    "chars": 6364,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing Cysharp.Threading.Tasks.Internal;\n\nnamesp"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Min.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 57ac9da21d3457849a8e45548290a508\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/MinMax.cs",
    "chars": 121321,
    "preview": "using System;\nusing System.Threading;\nusing Cysharp.Threading.Tasks.Internal;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/MinMax.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 2d6da02d9ab970e4999daf7147d98e36\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/MinMax.tt",
    "chars": 8480,
    "preview": "<#@ template debug=\"false\" hostspecific=\"false\" language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespac"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/MinMax.tt.meta",
    "chars": 155,
    "preview": "fileFormatVersion: 2\nguid: 18108e9feb2ec40498df573cfef2ea15\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetB"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Never.cs",
    "chars": 1470,
    "preview": "using System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{\n    public static partial class UniTaskAsyncEnumerabl"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Never.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 8b307c3d3be71a94da251564bcdefa3d\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/OfType.cs",
    "chars": 1800,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/OfType.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 111ffe87a7d700442a9ef5af554b252c\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/OrderBy.cs",
    "chars": 26316,
    "preview": "using Cysharp.Threading.Tasks;\nusing Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Collections.Generic;\n"
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/OrderBy.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 413883ceff8546143bdf200aafa4b8f7\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Pairwise.cs",
    "chars": 4214,
    "preview": "using Cysharp.Threading.Tasks.Internal;\nusing System;\nusing System.Threading;\n\nnamespace Cysharp.Threading.Tasks.Linq\n{"
  }
]

// ... and 311 more files (download for full content)

About this extraction

This page contains the full source code of the Cysharp/UniTask GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 511 files (3.1 MB), approximately 852.5k tokens, and a symbol index with 5845 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!