mirror of https://github.com/Cysharp/UniTask
perf: using AutoResetUniTaskCompletionSource instead of UniTaskCompletionSource
parent
63708841f5
commit
d3e71502d6
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue