public static IUniTaskSource <UnityWebRequest> Create(UnityWebRequestAsyncOperation asyncOperation, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { return(AutoResetUniTaskCompletionSource <UnityWebRequest> .CreateFromCanceled(cancellationToken, out token)); } if (!pool.TryPop(out var result)) { result = new UnityWebRequestAsyncOperationWithCancellationSource(); } result.asyncOperation = asyncOperation; result.cancellationToken = cancellationToken; result.completed = false; TaskTracker.TrackActiveTask(result, 3); PlayerLoopHelper.AddAction(PlayerLoopTiming.Update, result); asyncOperation.completed += result.continuationAction; token = result.core.Version; return(result); }
public static UniTask <UnityWebRequest> WithCancellation(this UnityWebRequestAsyncOperation asyncOperation, CancellationToken cancellationToken) { Error.ThrowArgumentNullException(asyncOperation, nameof(asyncOperation)); if (cancellationToken.IsCancellationRequested) { return(UniTask.FromCanceled <UnityWebRequest>(cancellationToken)); } if (asyncOperation.isDone) { if (asyncOperation.webRequest.IsError()) { return(UniTask.FromException <UnityWebRequest>(new UnityWebRequestException(asyncOperation.webRequest))); } return(UniTask.FromResult(asyncOperation.webRequest)); } return(new UniTask <UnityWebRequest>(UnityWebRequestAsyncOperationWithCancellationSource.Create(asyncOperation, cancellationToken, out var token), token)); }