protected async Task RunTest_CanSetCancelledManually_MultiThread <TResult> (Func <AsyncProcessingRequest <TResult> > rqFn,
                                                                                    bool syncOnCheckpoints,
                                                                                    int nThreads)
        {
            Barrier syncCheckpoint =
                new Barrier(nThreads);

            List <Task> allThreads =
                new List <Task>();

            AsyncProcessingRequest <TResult> rq = rqFn
                                                  .Invoke();

            for (int i = 0; i < nThreads; i++)
            {
                allThreads.Add(Task.Run(() =>
                {
                    if (syncOnCheckpoints)
                    {
                        syncCheckpoint.SignalAndWait();
                    }
                    rq.SetCancelled();
                }));
            }

            await Task.WhenAll(allThreads);

            Assert.AreEqual(TaskStatus.Canceled,
                            rq.Task.Status);
        }
        protected void RunTest_CanSetCancelledManually_SingleThread <TResult> (Func <AsyncProcessingRequest <TResult> > rqFn)
        {
            AsyncProcessingRequest <TResult> rq = rqFn
                                                  .Invoke();

            rq.SetCancelled();

            Assert.AreEqual(TaskStatus.Canceled,
                            rq.Task.Status);
        }