internal void TrySetCanceled(CancellationToken cancellationToken)
 {
     if (!this.Task.IsCompleted)
     {
         if (this.CanCompleteInline)
         {
             ThreadingTools.TrySetCanceled(this, cancellationToken);
         }
         else
         {
             Tuple <TaskCompletionSourceWithoutInlining <T>, CancellationToken> tuple =
                 Tuple.Create(this, cancellationToken);
             ThreadPool.QueueUserWorkItem(
                 state =>
             {
                 var s = (Tuple <TaskCompletionSourceWithoutInlining <T>, CancellationToken>)state;
                 ThreadingTools.TrySetCanceled(s.Item1, s.Item2);
             },
                 tuple);
         }
     }
 }