Compare commits

...

3 Commits

Author SHA1 Message Date
dvsilch
0db2f737b8 Merge d3e71502d6 into 06067cd4c8 2025-04-09 13:48:29 +00:00
dvsilch
d3e71502d6 perf: using AutoResetUniTaskCompletionSource instead of UniTaskCompletionSource 2025-04-09 21:20:36 +08:00
dvsilch
63708841f5 fix: typo 2025-04-09 21:14:13 +08:00
7 changed files with 23 additions and 23 deletions

View File

@@ -10,7 +10,7 @@ namespace Cysharp.Threading.Tasks
static Action<object> continuation = SetCompletionSource; static Action<object> continuation = SetCompletionSource;
Func<UniTask> taskFactory; Func<UniTask> taskFactory;
UniTaskCompletionSource completionSource; AutoResetUniTaskCompletionSource completionSource;
UniTask.Awaiter awaiter; UniTask.Awaiter awaiter;
object syncLock; object syncLock;
@@ -19,7 +19,7 @@ namespace Cysharp.Threading.Tasks
public AsyncLazy(Func<UniTask> taskFactory) public AsyncLazy(Func<UniTask> taskFactory)
{ {
this.taskFactory = taskFactory; this.taskFactory = taskFactory;
this.completionSource = new UniTaskCompletionSource(); this.completionSource = AutoResetUniTaskCompletionSource.Create();
this.syncLock = new object(); this.syncLock = new object();
this.initialized = false; this.initialized = false;
} }
@@ -27,7 +27,7 @@ namespace Cysharp.Threading.Tasks
internal AsyncLazy(UniTask task) internal AsyncLazy(UniTask task)
{ {
this.taskFactory = null; this.taskFactory = null;
this.completionSource = new UniTaskCompletionSource(); this.completionSource = AutoResetUniTaskCompletionSource.Create();
this.syncLock = null; this.syncLock = null;
this.initialized = true; this.initialized = true;
@@ -129,7 +129,7 @@ namespace Cysharp.Threading.Tasks
static Action<object> continuation = SetCompletionSource; static Action<object> continuation = SetCompletionSource;
Func<UniTask<T>> taskFactory; Func<UniTask<T>> taskFactory;
UniTaskCompletionSource<T> completionSource; AutoResetUniTaskCompletionSource<T> completionSource;
UniTask<T>.Awaiter awaiter; UniTask<T>.Awaiter awaiter;
object syncLock; object syncLock;
@@ -138,7 +138,7 @@ namespace Cysharp.Threading.Tasks
public AsyncLazy(Func<UniTask<T>> taskFactory) public AsyncLazy(Func<UniTask<T>> taskFactory)
{ {
this.taskFactory = taskFactory; this.taskFactory = taskFactory;
this.completionSource = new UniTaskCompletionSource<T>(); this.completionSource = AutoResetUniTaskCompletionSource<T>.Create();
this.syncLock = new object(); this.syncLock = new object();
this.initialized = false; this.initialized = false;
} }
@@ -146,7 +146,7 @@ namespace Cysharp.Threading.Tasks
internal AsyncLazy(UniTask<T> task) internal AsyncLazy(UniTask<T> task)
{ {
this.taskFactory = null; this.taskFactory = null;
this.completionSource = new UniTaskCompletionSource<T>(); this.completionSource = AutoResetUniTaskCompletionSource<T>.Create();
this.syncLock = null; this.syncLock = null;
this.initialized = true; this.initialized = true;

View File

@@ -67,13 +67,13 @@ namespace Cysharp.Threading.Tasks
return (UniTask.FromCanceled(cancellationToken), default(CancellationTokenRegistration)); return (UniTask.FromCanceled(cancellationToken), default(CancellationTokenRegistration));
} }
var promise = new UniTaskCompletionSource(); var promise = AutoResetUniTaskCompletionSource.Create();
return (promise.Task, cancellationToken.RegisterWithoutCaptureExecutionContext(cancellationTokenCallback, promise)); return (promise.Task, cancellationToken.RegisterWithoutCaptureExecutionContext(cancellationTokenCallback, promise));
} }
static void Callback(object state) static void Callback(object state)
{ {
var promise = (UniTaskCompletionSource)state; var promise = (AutoResetUniTaskCompletionSource)state;
promise.TrySetResult(); promise.TrySetResult();
} }

View File

@@ -91,7 +91,7 @@ namespace Cysharp.Threading.Tasks
{ {
readonly Queue<T> items; readonly Queue<T> items;
readonly SingleConsumerUnboundedChannelReader readerSource; readonly SingleConsumerUnboundedChannelReader readerSource;
UniTaskCompletionSource completedTaskSource; AutoResetUniTaskCompletionSource completedTaskSource;
UniTask completedTask; UniTask completedTask;
Exception completionError; Exception completionError;
@@ -208,7 +208,7 @@ namespace Cysharp.Threading.Tasks
return parent.completedTask; return parent.completedTask;
} }
parent.completedTaskSource = new UniTaskCompletionSource(); parent.completedTaskSource = AutoResetUniTaskCompletionSource.Create();
return parent.completedTaskSource.Task; return parent.completedTaskSource.Task;
} }
} }

View File

@@ -36,11 +36,11 @@ namespace Cysharp.Threading.Tasks.Linq
public UniTask<bool> MoveNextAsync() public UniTask<bool> MoveNextAsync()
{ {
var tcs = new UniTaskCompletionSource<bool>(); var tcs = AutoResetUniTaskCompletionSource<bool>.Create();
cancellationToken.Register(state => cancellationToken.Register(state =>
{ {
var task = (UniTaskCompletionSource<bool>)state; var task = (AutoResetUniTaskCompletionSource<bool>)state;
task.TrySetCanceled(cancellationToken); task.TrySetCanceled(cancellationToken);
}, tcs); }, tcs);

View File

@@ -18,13 +18,13 @@ namespace Cysharp.Threading.Tasks
#endif #endif
/// <summary>This CancellationToken is canceled when the MonoBehaviour will be destroyed.</summary> /// <summary>This CancellationToken is canceled when the GameObject will be destroyed.</summary>
public static CancellationToken GetCancellationTokenOnDestroy(this GameObject gameObject) public static CancellationToken GetCancellationTokenOnDestroy(this GameObject gameObject)
{ {
return gameObject.GetAsyncDestroyTrigger().CancellationToken; return gameObject.GetAsyncDestroyTrigger().CancellationToken;
} }
/// <summary>This CancellationToken is canceled when the MonoBehaviour will be destroyed.</summary> /// <summary>This CancellationToken is canceled when the Component will be destroyed.</summary>
public static CancellationToken GetCancellationTokenOnDestroy(this Component component) public static CancellationToken GetCancellationTokenOnDestroy(this Component component)
{ {
#if UNITY_2022_2_OR_NEWER #if UNITY_2022_2_OR_NEWER

View File

@@ -16,11 +16,11 @@ namespace Cysharp.Threading.Tasks
/// </summary> /// </summary>
public static UniTask<T> AsUniTask<T>(this Task<T> task, bool useCurrentSynchronizationContext = true) public static UniTask<T> AsUniTask<T>(this Task<T> task, bool useCurrentSynchronizationContext = true)
{ {
var promise = new UniTaskCompletionSource<T>(); var promise = AutoResetUniTaskCompletionSource<T>.Create();
task.ContinueWith((x, state) => task.ContinueWith((x, state) =>
{ {
var p = (UniTaskCompletionSource<T>)state; var p = (AutoResetUniTaskCompletionSource<T>)state;
switch (x.Status) switch (x.Status)
{ {
@@ -46,11 +46,11 @@ namespace Cysharp.Threading.Tasks
/// </summary> /// </summary>
public static UniTask AsUniTask(this Task task, bool useCurrentSynchronizationContext = true) public static UniTask AsUniTask(this Task task, bool useCurrentSynchronizationContext = true)
{ {
var promise = new UniTaskCompletionSource(); var promise = AutoResetUniTaskCompletionSource.Create();
task.ContinueWith((x, state) => task.ContinueWith((x, state) =>
{ {
var p = (UniTaskCompletionSource)state; var p = (AutoResetUniTaskCompletionSource)state;
switch (x.Status) switch (x.Status)
{ {

View File

@@ -11,7 +11,7 @@ namespace Cysharp.Threading.Tasks
{ {
public static UniTask<T> ToUniTask<T>(this IObservable<T> source, bool useFirstValue = false, CancellationToken cancellationToken = default) public static UniTask<T> ToUniTask<T>(this IObservable<T> source, bool useFirstValue = false, CancellationToken cancellationToken = default)
{ {
var promise = new UniTaskCompletionSource<T>(); var promise = AutoResetUniTaskCompletionSource<T>.Create();
var disposable = new SingleAssignmentDisposable(); var disposable = new SingleAssignmentDisposable();
var observer = useFirstValue var observer = useFirstValue
@@ -109,7 +109,7 @@ namespace Cysharp.Threading.Tasks
{ {
static readonly Action<object> callback = OnCanceled; static readonly Action<object> callback = OnCanceled;
readonly UniTaskCompletionSource<T> promise; readonly IPromise<T> promise;
readonly SingleAssignmentDisposable disposable; readonly SingleAssignmentDisposable disposable;
readonly CancellationToken cancellationToken; readonly CancellationToken cancellationToken;
readonly CancellationTokenRegistration registration; readonly CancellationTokenRegistration registration;
@@ -117,7 +117,7 @@ namespace Cysharp.Threading.Tasks
bool hasValue; bool hasValue;
T latestValue; T latestValue;
public ToUniTaskObserver(UniTaskCompletionSource<T> promise, SingleAssignmentDisposable disposable, CancellationToken cancellationToken) public ToUniTaskObserver(IPromise<T> promise, SingleAssignmentDisposable disposable, CancellationToken cancellationToken)
{ {
this.promise = promise; this.promise = promise;
this.disposable = disposable; this.disposable = disposable;
@@ -180,14 +180,14 @@ namespace Cysharp.Threading.Tasks
{ {
static readonly Action<object> callback = OnCanceled; static readonly Action<object> callback = OnCanceled;
readonly UniTaskCompletionSource<T> promise; readonly IPromise<T> promise;
readonly SingleAssignmentDisposable disposable; readonly SingleAssignmentDisposable disposable;
readonly CancellationToken cancellationToken; readonly CancellationToken cancellationToken;
readonly CancellationTokenRegistration registration; readonly CancellationTokenRegistration registration;
bool hasValue; bool hasValue;
public FirstValueToUniTaskObserver(UniTaskCompletionSource<T> promise, SingleAssignmentDisposable disposable, CancellationToken cancellationToken) public FirstValueToUniTaskObserver(IPromise<T> promise, SingleAssignmentDisposable disposable, CancellationToken cancellationToken)
{ {
this.promise = promise; this.promise = promise;
this.disposable = disposable; this.disposable = disposable;