perf: using AutoResetUniTaskCompletionSource instead of UniTaskCompletionSource

pull/659/head
dvsilch 2025-04-09 21:20:36 +08:00
parent 63708841f5
commit d3e71502d6
6 changed files with 21 additions and 21 deletions

View File

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

View File

@ -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();
}

View File

@ -91,7 +91,7 @@ namespace Cysharp.Threading.Tasks
{
readonly Queue<T> 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;
}
}

View File

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

View File

@ -16,11 +16,11 @@ namespace Cysharp.Threading.Tasks
/// </summary>
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) =>
{
var p = (UniTaskCompletionSource<T>)state;
var p = (AutoResetUniTaskCompletionSource<T>)state;
switch (x.Status)
{
@ -46,11 +46,11 @@ namespace Cysharp.Threading.Tasks
/// </summary>
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)
{

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)
{
var promise = new UniTaskCompletionSource<T>();
var promise = AutoResetUniTaskCompletionSource<T>.Create();
var disposable = new SingleAssignmentDisposable();
var observer = useFirstValue
@ -109,7 +109,7 @@ namespace Cysharp.Threading.Tasks
{
static readonly Action<object> callback = OnCanceled;
readonly UniTaskCompletionSource<T> promise;
readonly IPromise<T> 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<T> promise, SingleAssignmentDisposable disposable, CancellationToken cancellationToken)
public ToUniTaskObserver(IPromise<T> promise, SingleAssignmentDisposable disposable, CancellationToken cancellationToken)
{
this.promise = promise;
this.disposable = disposable;
@ -180,14 +180,14 @@ namespace Cysharp.Threading.Tasks
{
static readonly Action<object> callback = OnCanceled;
readonly UniTaskCompletionSource<T> promise;
readonly IPromise<T> promise;
readonly SingleAssignmentDisposable disposable;
readonly CancellationToken cancellationToken;
readonly CancellationTokenRegistration registration;
bool hasValue;
public FirstValueToUniTaskObserver(UniTaskCompletionSource<T> promise, SingleAssignmentDisposable disposable, CancellationToken cancellationToken)
public FirstValueToUniTaskObserver(IPromise<T> promise, SingleAssignmentDisposable disposable, CancellationToken cancellationToken)
{
this.promise = promise;
this.disposable = disposable;