// 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 void OnNext(T value) { hasValue = true; try { promise.TrySetResult(value); } finally { registration.Dispose(); disposable.Dispose(); } }
public void OnCompleted() { try { if (hasValue) { promise.TrySetResult(latestValue); } else { promise.TrySetException(new InvalidOperationException("Sequence has no elements")); } } finally { registration.Dispose(); disposable.Dispose(); } }