From 63708841f5a1617876b0c2023ed9caede954e1e2 Mon Sep 17 00:00:00 2001 From: dvsilch <64416955+dvsilch@users.noreply.github.com> Date: Wed, 9 Apr 2025 21:14:13 +0800 Subject: [PATCH 1/3] fix: typo --- .../UniTask/Runtime/Triggers/AsyncTriggerExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/AsyncTriggerExtensions.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/AsyncTriggerExtensions.cs index bad5a04..2411b36 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/AsyncTriggerExtensions.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/Triggers/AsyncTriggerExtensions.cs @@ -18,13 +18,13 @@ namespace Cysharp.Threading.Tasks #endif - /// This CancellationToken is canceled when the MonoBehaviour will be destroyed. + /// This CancellationToken is canceled when the GameObject will be destroyed. public static CancellationToken GetCancellationTokenOnDestroy(this GameObject gameObject) { return gameObject.GetAsyncDestroyTrigger().CancellationToken; } - /// This CancellationToken is canceled when the MonoBehaviour will be destroyed. + /// This CancellationToken is canceled when the Component will be destroyed. public static CancellationToken GetCancellationTokenOnDestroy(this Component component) { #if UNITY_2022_2_OR_NEWER From d3e71502d6b017b8dacbadc1b606678fc82bd6cc Mon Sep 17 00:00:00 2001 From: dvsilch <64416955+dvsilch@users.noreply.github.com> Date: Wed, 9 Apr 2025 21:20:36 +0800 Subject: [PATCH 2/3] perf: using AutoResetUniTaskCompletionSource instead of UniTaskCompletionSource --- .../Assets/Plugins/UniTask/Runtime/AsyncLazy.cs | 12 ++++++------ .../UniTask/Runtime/CancellationTokenExtensions.cs | 4 ++-- .../Assets/Plugins/UniTask/Runtime/Channel.cs | 4 ++-- .../Assets/Plugins/UniTask/Runtime/Linq/Never.cs | 4 ++-- .../Plugins/UniTask/Runtime/UniTaskExtensions.cs | 8 ++++---- .../UniTask/Runtime/UniTaskObservableExtensions.cs | 10 +++++----- 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncLazy.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncLazy.cs index 51bfadc..7a99ab5 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncLazy.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncLazy.cs @@ -10,7 +10,7 @@ namespace Cysharp.Threading.Tasks static Action continuation = SetCompletionSource; Func taskFactory; - UniTaskCompletionSource completionSource; + AutoResetUniTaskCompletionSource completionSource; UniTask.Awaiter awaiter; object syncLock; @@ -19,7 +19,7 @@ namespace Cysharp.Threading.Tasks public AsyncLazy(Func taskFactory) { this.taskFactory = taskFactory; - this.completionSource = new UniTaskCompletionSource(); + this.completionSource = AutoResetUniTaskCompletionSource.Create(); this.syncLock = new object(); this.initialized = false; } @@ -27,7 +27,7 @@ namespace Cysharp.Threading.Tasks internal AsyncLazy(UniTask task) { this.taskFactory = null; - this.completionSource = new UniTaskCompletionSource(); + this.completionSource = AutoResetUniTaskCompletionSource.Create(); this.syncLock = null; this.initialized = true; @@ -129,7 +129,7 @@ namespace Cysharp.Threading.Tasks static Action continuation = SetCompletionSource; Func> taskFactory; - UniTaskCompletionSource completionSource; + AutoResetUniTaskCompletionSource completionSource; UniTask.Awaiter awaiter; object syncLock; @@ -138,7 +138,7 @@ namespace Cysharp.Threading.Tasks public AsyncLazy(Func> taskFactory) { this.taskFactory = taskFactory; - this.completionSource = new UniTaskCompletionSource(); + this.completionSource = AutoResetUniTaskCompletionSource.Create(); this.syncLock = new object(); this.initialized = false; } @@ -146,7 +146,7 @@ namespace Cysharp.Threading.Tasks internal AsyncLazy(UniTask task) { this.taskFactory = null; - this.completionSource = new UniTaskCompletionSource(); + this.completionSource = AutoResetUniTaskCompletionSource.Create(); this.syncLock = null; this.initialized = true; diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenExtensions.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenExtensions.cs index 3f3a532..3da47c1 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenExtensions.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenExtensions.cs @@ -67,13 +67,13 @@ namespace Cysharp.Threading.Tasks return (UniTask.FromCanceled(cancellationToken), default(CancellationTokenRegistration)); } - var promise = new UniTaskCompletionSource(); + var promise = AutoResetUniTaskCompletionSource.Create(); return (promise.Task, cancellationToken.RegisterWithoutCaptureExecutionContext(cancellationTokenCallback, promise)); } static void Callback(object state) { - var promise = (UniTaskCompletionSource)state; + var promise = (AutoResetUniTaskCompletionSource)state; promise.TrySetResult(); } diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/Channel.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/Channel.cs index 5a484fd..196ebdd 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/Channel.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/Channel.cs @@ -91,7 +91,7 @@ namespace Cysharp.Threading.Tasks { readonly Queue items; readonly SingleConsumerUnboundedChannelReader readerSource; - UniTaskCompletionSource completedTaskSource; + AutoResetUniTaskCompletionSource completedTaskSource; UniTask completedTask; Exception completionError; @@ -208,7 +208,7 @@ namespace Cysharp.Threading.Tasks return parent.completedTask; } - parent.completedTaskSource = new UniTaskCompletionSource(); + parent.completedTaskSource = AutoResetUniTaskCompletionSource.Create(); return parent.completedTaskSource.Task; } } diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Never.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Never.cs index 2dbce71..ca3925b 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Never.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/Linq/Never.cs @@ -36,11 +36,11 @@ namespace Cysharp.Threading.Tasks.Linq public UniTask MoveNextAsync() { - var tcs = new UniTaskCompletionSource(); + var tcs = AutoResetUniTaskCompletionSource.Create(); cancellationToken.Register(state => { - var task = (UniTaskCompletionSource)state; + var task = (AutoResetUniTaskCompletionSource)state; task.TrySetCanceled(cancellationToken); }, tcs); diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs index 5155567..7ab8543 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs @@ -16,11 +16,11 @@ namespace Cysharp.Threading.Tasks /// public static UniTask AsUniTask(this Task task, bool useCurrentSynchronizationContext = true) { - var promise = new UniTaskCompletionSource(); + var promise = AutoResetUniTaskCompletionSource.Create(); task.ContinueWith((x, state) => { - var p = (UniTaskCompletionSource)state; + var p = (AutoResetUniTaskCompletionSource)state; switch (x.Status) { @@ -46,11 +46,11 @@ namespace Cysharp.Threading.Tasks /// public static UniTask AsUniTask(this Task task, bool useCurrentSynchronizationContext = true) { - var promise = new UniTaskCompletionSource(); + var promise = AutoResetUniTaskCompletionSource.Create(); task.ContinueWith((x, state) => { - var p = (UniTaskCompletionSource)state; + var p = (AutoResetUniTaskCompletionSource)state; switch (x.Status) { diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskObservableExtensions.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskObservableExtensions.cs index d2bd961..bea0621 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskObservableExtensions.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskObservableExtensions.cs @@ -11,7 +11,7 @@ namespace Cysharp.Threading.Tasks { public static UniTask ToUniTask(this IObservable source, bool useFirstValue = false, CancellationToken cancellationToken = default) { - var promise = new UniTaskCompletionSource(); + var promise = AutoResetUniTaskCompletionSource.Create(); var disposable = new SingleAssignmentDisposable(); var observer = useFirstValue @@ -109,7 +109,7 @@ namespace Cysharp.Threading.Tasks { static readonly Action callback = OnCanceled; - readonly UniTaskCompletionSource promise; + readonly IPromise promise; readonly SingleAssignmentDisposable disposable; readonly CancellationToken cancellationToken; readonly CancellationTokenRegistration registration; @@ -117,7 +117,7 @@ namespace Cysharp.Threading.Tasks bool hasValue; T latestValue; - public ToUniTaskObserver(UniTaskCompletionSource promise, SingleAssignmentDisposable disposable, CancellationToken cancellationToken) + public ToUniTaskObserver(IPromise promise, SingleAssignmentDisposable disposable, CancellationToken cancellationToken) { this.promise = promise; this.disposable = disposable; @@ -180,14 +180,14 @@ namespace Cysharp.Threading.Tasks { static readonly Action callback = OnCanceled; - readonly UniTaskCompletionSource promise; + readonly IPromise promise; readonly SingleAssignmentDisposable disposable; readonly CancellationToken cancellationToken; readonly CancellationTokenRegistration registration; bool hasValue; - public FirstValueToUniTaskObserver(UniTaskCompletionSource promise, SingleAssignmentDisposable disposable, CancellationToken cancellationToken) + public FirstValueToUniTaskObserver(IPromise promise, SingleAssignmentDisposable disposable, CancellationToken cancellationToken) { this.promise = promise; this.disposable = disposable; From 16895054f1d62450ceca59f302b97e2e2592b914 Mon Sep 17 00:00:00 2001 From: dvsilch <64416955+dvsilch@users.noreply.github.com> Date: Wed, 9 Apr 2025 22:08:32 +0800 Subject: [PATCH 3/3] fix: async lazy cannot use utcs auto reset version --- .../Assets/Plugins/UniTask/Runtime/AsyncLazy.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncLazy.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncLazy.cs index 7a99ab5..51bfadc 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncLazy.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/AsyncLazy.cs @@ -10,7 +10,7 @@ namespace Cysharp.Threading.Tasks static Action continuation = SetCompletionSource; Func taskFactory; - AutoResetUniTaskCompletionSource completionSource; + UniTaskCompletionSource completionSource; UniTask.Awaiter awaiter; object syncLock; @@ -19,7 +19,7 @@ namespace Cysharp.Threading.Tasks public AsyncLazy(Func taskFactory) { this.taskFactory = taskFactory; - this.completionSource = AutoResetUniTaskCompletionSource.Create(); + this.completionSource = new UniTaskCompletionSource(); this.syncLock = new object(); this.initialized = false; } @@ -27,7 +27,7 @@ namespace Cysharp.Threading.Tasks internal AsyncLazy(UniTask task) { this.taskFactory = null; - this.completionSource = AutoResetUniTaskCompletionSource.Create(); + this.completionSource = new UniTaskCompletionSource(); this.syncLock = null; this.initialized = true; @@ -129,7 +129,7 @@ namespace Cysharp.Threading.Tasks static Action continuation = SetCompletionSource; Func> taskFactory; - AutoResetUniTaskCompletionSource completionSource; + UniTaskCompletionSource completionSource; UniTask.Awaiter awaiter; object syncLock; @@ -138,7 +138,7 @@ namespace Cysharp.Threading.Tasks public AsyncLazy(Func> taskFactory) { this.taskFactory = taskFactory; - this.completionSource = AutoResetUniTaskCompletionSource.Create(); + this.completionSource = new UniTaskCompletionSource(); this.syncLock = new object(); this.initialized = false; } @@ -146,7 +146,7 @@ namespace Cysharp.Threading.Tasks internal AsyncLazy(UniTask task) { this.taskFactory = null; - this.completionSource = AutoResetUniTaskCompletionSource.Create(); + this.completionSource = new UniTaskCompletionSource(); this.syncLock = null; this.initialized = true;