Ejemplo n.º 1
0
 public void Cancel()
 {
     CompletionSource?.TrySetCanceled();
     _cts?.Cancel();
     IsCancelled = true;
     _completedHandler?.Invoke(this, Status);
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Awaits a task execution on the specified scheduler, providing the result.
        /// </summary>
        /// <returns>A task that will provide the result of the execution.</returns>
        public static Task <T> Run <T>(this IScheduler source, Func <CancellationToken, Task <T> > taskBuilder, CancellationToken cancellationToken)
        {
            var completion = new FastTaskCompletionSource <T>();

            var disposable = new SingleAssignmentDisposable();
            var ctr        = default(CancellationTokenRegistration);

            if (cancellationToken.CanBeCanceled)
            {
                ctr = cancellationToken.Register(() =>
                {
                    completion.TrySetCanceled();
                    disposable.Dispose();
                });
            }

            disposable.Disposable = source.Schedule(
                async() =>
            {
                try
                {
                    var result = await taskBuilder(cancellationToken);
                    completion.TrySetResult(result);
                }
                catch (Exception e)
                {
                    completion.TrySetException(e);
                }
                finally
                {
                    ctr.Dispose();
                }
            }
                );

            return(completion.Task);
        }
Ejemplo n.º 3
0
 public void Canceled() => _task.TrySetCanceled();
Ejemplo n.º 4
0
 public void Abort() => _task.TrySetCanceled();