代码之家  ›  专栏  ›  技术社区  ›  ProfK

任务已取消长时间运行任务的异常

  •  -1
  • ProfK  · 技术社区  · 7 年前

    我在WPF客户机中有一个用于Web API的方法:

    public async Task PostFileAsync(string localPath, string serverPath)
    

    这种方法的精髓是:

    var resp = await _client.PostAsync(uri, content);
    

    在哪里? _client 是一个 HttpClient 实例。

    当我尝试上传明显耗时太长的大文件时,我得到一个 A task was canceled. 异常,具有以下堆栈跟踪:

    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    at System.Net.Http.HttpClient.<FinishSendAsyncBuffered>d__58.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
    at QuickDrive.Wpf.Api.ApiClient.<PostFileAsync>d__10.MoveNext() in C:\Projects\QuickDrive\Code\QuickDrive.Wpf\Api\ApiClient.cs:line 176
    

    我在这里没有看到任何超时,但是对于那些花费不到10分钟(我还没有精确计时)的帖子来说,这个任务完成得很好,例如在我的连接上,对于小于+-500MB的文件。

    此异常是否确实是因为超时,如果是,如何配置 await 允许在取消任务之前有一个可配置的时间;假设任务因超时而取消。除了我尝试上传一个大文件外,其他任何场景都不会取消它。

    1 回复  |  直到 7 年前
        1
  •  0
  •   TheGeneral    7 年前

    试试这个

    httpClient.Timeout

    获取或设置请求超时前等待的时间跨度。

    要设置无限超时,请将属性值设置为 无穷大。

    httpclient看起来只是超时并取消了任务