【问题标题】:Task cancelled immediately when calling an async function within unit test?在单元测试中调用异步函数时任务立即取消?
【发布时间】:2020-04-20 13:13:41
【问题描述】:

我很难弄清楚为什么我的任务被取消了。

[<Fact>]
let ``Query applicant count``() =

    async {

        // Test
        let! response = WebGateway.get EventStore.endpoint "ApplicantCountFn" // Can't get beyond this

        // Verify
        match! response.Content.ReadAsStringAsync()  |> Async.AwaitTask with
        | "" -> Assert.True (false, "result is empty")
        | _  -> ()
    }

观察:

我验证了服务器返回成功的结果。

这是客户端测试的错误:

  Message: 
    System.Threading.Tasks.TaskCanceledException : A task was canceled.
  Stack Trace: 
    TaskAwaiter.ThrowForNonSuccess(Task task)
    TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    --- End of stack trace from previous location where exception was thrown ---
    TaskAwaiter.ThrowForNonSuccess(Task task)
    TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    --- End of stack trace from previous location where exception was thrown ---
    TaskAwaiter.ThrowForNonSuccess(Task task)
    TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

附录:

let get baseAddress (resource:string) =

    async {
        let client = httpClient baseAddress
        return! client.GetAsync(resource) |> Async.AwaitTask
    }

【问题讨论】:

    标签: f# xunit


    【解决方案1】:

    我将客户端请求的超时时间增加到 30 秒:

    let client = new HttpClient(handler)
    client.Timeout     <- TimeSpan(0,0,30)
    

    【讨论】:

      猜你喜欢
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 2016-02-11
      • 2019-02-05
      相关资源
      最近更新 更多