anchor.diff:  [<Fact>]
   let ``Very lengthy task``() = asTask <| async {
       let source = TaskCompletionSource<int>()
  -    Task.Delay(100).ContinueWith(fun _ -> source.TrySetResult(0)) |> ignore
  +    Task.Delay(500).ContinueWith(fun _ -> source.TrySetResult(0)) |> ignore
       do! Assert.ThrowsAnyAsync<OperationCanceledException>(fun () ->
               TaskEx.TimeoutAfter(source.Task, MaxTimeout) :> Task) |> Async.AwaitTask |> Async.Ignore
   }
positive.code: open Xunit
  open ThriftSharp.Utilities
  
  let MaxTimeout = TimeSpan.FromMilliseconds(40.0)
  
  [<Fact>]
  let ``Already-completed task``() = asTask <| async {
  
negative.code: [<Fact>]
  let ``Quickly canceled task``() = asTask <| async {
      let source = TaskCompletionSource<int>()
      let task = Task.Delay(5).ContinueWith(fun _ -> source.TrySetCanceled(CancellationToken(false)))
      do! Assert.ThrowsAnyAsync<OperationCanceledException>(fun () ->
              TaskEx.TimeoutAfter(source.Task, MaxTimeout) :> Task) |> Async.AwaitTask |> Async.Ignore
      do! task |> Async.AwaitTask |> Async.Ignore
  