anchor.diff:      [<Test>]
       member this.StartAsTaskCancellation () =
           let cts = new CancellationTokenSource()
  -        let tcs = TaskCompletionSource<unit>()
  +        let mutable spinloop = true
  +        let doSpinloop () = while spinloop do ()
           let a = async {
               cts.CancelAfter (100)
  -            do! tcs.Task |> Async.AwaitTask }
  +            doSpinloop()
  +        }
   #if !NET46
           let t : Task<unit> =
   #else
  
positive.code:             | :? TaskCanceledException as t -> ()
              | _ -> reraise()
          Assert.IsTrue (t.IsCompleted, "Task is not completed")
  
      [<Test>]
      member this.StartTask () =
  
negative.code: #endif
              Async.StartAsTask(a, cancellationToken = cts.Token)
  
          // Should not finish, we don't eagerly mark the task done just because it's been signaled to cancel.
          try
              let result = t.Wait(300)
              Assert.IsFalse (result)
          with :? AggregateException -> Assert.Fail "Task should not finish, yet"
  
          spinloop <- false
          
          try
              this.WaitASec t
  