public static UniTask <T> FromCanceled <T>(CancellationToken token) { var promise = new UniTaskCompletionSource <T>(); promise.TrySetException(new OperationCanceledException(token)); promise.MarkHandled(); return(new UniTask <T>(promise)); }
public static UniTask <T> FromException <T>(Exception ex) { var promise = new UniTaskCompletionSource <T>(); promise.TrySetException(ex); promise.MarkHandled(); return(new UniTask <T>(promise)); }
static CanceledUniTaskCache() { var promise = new UniTaskCompletionSource <T>(); promise.TrySetCanceled(); promise.MarkHandled(); Task = new UniTask <T>(promise); }
public static (UniTask, CancellationTokenRegistration) ToUniTask(this CancellationToken cts) { if (cts.IsCancellationRequested) { return (UniTask.FromCanceled(cts), default(CancellationTokenRegistration)); } var promise = new UniTaskCompletionSource<AsyncUnit>(); return (promise.Task, cts.RegisterWithoutCaptureExecutionContext(cancellationTokenCallback, promise)); }
// Addressable Assets System public static UniTask <T> LoadAddressables <T>(object key) where T : class { return(new UniTask <T>(() => { var completionSource = new UniTaskCompletionSource <T>(); Addressables.LoadAsset <T>(key).Completed += x => completionSource.TrySetResult(x.Result); return completionSource.Task; })); }
// Resources.LoadAsync public static UniTask <T> LoadResources <T>(string path) where T : UnityEngine.Object { return(new UniTask <T>(() => { var completionSource = new UniTaskCompletionSource <T>(); var loadTask = Resources.LoadAsync <T>(path); loadTask.completed += x => completionSource.TrySetResult(loadTask.asset as T); return completionSource.Task; })); }
public FirstValueToUniTaskObserver(UniTaskCompletionSource <T> promise, SingleAssignmentDisposable disposable, CancellationToken cancellationToken) { this.promise = promise; this.disposable = disposable; this.cancellationToken = cancellationToken; if (this.cancellationToken.CanBeCanceled) { this.registration = this.cancellationToken.RegisterWithoutCaptureExecutionContext(callback, this); } }
public static UniTask <T> ToUniTask <T>(this IObservable <T> source, CancellationToken cancellationToken = default(CancellationToken), bool useFirstValue = false) { var promise = new UniTaskCompletionSource <T>(); var disposable = new SingleAssignmentDisposable(); var observer = useFirstValue ? (IObserver <T>) new FirstValueToUniTaskObserver <T>(promise, disposable, cancellationToken) : (IObserver <T>) new ToUniTaskObserver <T>(promise, disposable, cancellationToken); try { disposable.Disposable = source.Subscribe(observer); } catch (Exception ex) { promise.TrySetException(ex); } return(promise.Task); }
public static UniTask FromException(Exception ex) { var promise = new UniTaskCompletionSource<AsyncUnit>(); promise.TrySetException(ex); promise.MarkHandled(); return new UniTask(promise); }