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