anchor.diff:  [<Fact>]
   let ``Quick task``() = asTask <| async {
       let source = TaskCompletionSource<int>()
  -    let task = Task.Delay(10).ContinueWith(fun _ -> source.TrySetResult(42))
  +    let task = Task.Delay(5).ContinueWith(fun _ -> source.TrySetResult(42))
       let! result = TaskEx.TimeoutAfter(source.Task, MaxTimeout) |> Async.AwaitTask
       result <=> 42
       do! task |> Async.AwaitTask |> Async.Ignore
  
positive.code: [<Fact>]
  let ``Very lengthy task``() = asTask <| async {
      let source = TaskCompletionSource<int>()
      Task.Delay(100).ContinueWith(fun _ -> source.TrySetResult(0)) |> ignore
      do! Assert.ThrowsAnyAsync<OperationCanceledException>(fun () ->
              TaskEx.TimeoutAfter(source.Task, MaxTimeout) :> Task) |> Async.AwaitTask |> Async.Ignore
  }
negative.code: [<Fact>]
  let ``Quickly faulted task``() = asTask <| async {
      let source = TaskCompletionSource<int>()
      let task = Task.Delay(5).ContinueWith(fun _ -> source.TrySetException(Exception("Oops")))
      let! exn = Assert.ThrowsAsync<Exception>(fun () -> TaskEx.TimeoutAfter(source.Task, MaxTimeout) :> Task) |> Async.AwaitTask
      exn.Message <=> "Oops"
      do! task |> Async.AwaitTask |> Async.Ignore
  