任务已取消长期运行任务

时间:2018-06-11 09:38:26

标签: c# asynchronous async-await timeout

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

public async Task PostFileAsync(string localPath, string serverPath)

这种方法的主要内容是:

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

其中_clientHttpClient个实例。

当我尝试上传显然需要太长时间的大文件时,我得到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 个答案:

答案 0 :(得分:0)

试一试

httpClient.Timeout

  

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

     

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

HttpClient似乎正在超时并取消任务