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

C# 长时间运行任务的任务已取消异常,c#,asynchronous,async-await,timeout,C#,Asynchronous,Async Await,Timeout,我在WPF客户端中有一个Web API的方法: public async Task PostFileAsync(string localPath, string serverPath) 此方法的主要内容是调用: var resp = await _client.PostAsync(uri, content); 其中,\u client是一个HttpClient实例 当我尝试上载显然花费太长时间的大文件时,我得到一个任务被取消。异常,堆栈跟踪如下: at System.Runtime.Comp

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

public async Task PostFileAsync(string localPath, string serverPath)
此方法的主要内容是调用:

var resp = await _client.PostAsync(uri, content);
其中,
\u client
是一个
HttpClient
实例

当我尝试上载显然花费太长时间的大文件时,我得到一个
任务被取消。
异常,堆栈跟踪如下:

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
在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)中
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Net.Http.HttpClient.d_u58.MoveNext()上
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()中
在C:\Projects\QuickDrive\Code\QuickDrive.Wpf\Api\ApiClient.cs中的QuickDrive.Wpf.Api.ApiClient.d_u10.MoveNext()处:第176行
我在这里没有提到任何超时,但是对于花费不到10分钟(我没有精确计时)的帖子,这个任务很好地完成了,例如在我的连接上,对于小于+-500MB的文件

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

试试看

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

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


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

这与
任务
类无关,请尝试设置
HttpClient.Timeout
属性。这就是为什么云存储解决方案提供将不同数据块上载到端点的选项,然后将它们与上载的块的清单一起线程化。大量上传在许多方面都是危险的。考虑一种不会让你碰到任何预先配置的超时的方法。@ SpEnter我设置了一个1GB的上传限制,所以我认为如果我配置一个公平的超时时间,任何上传都不应该那么重,这是一个真正的问题。我们需要尽快推出,所以我不想在这个阶段介绍分块上传的复杂性,但谢谢。我将考虑改进下一个版本的上传。只是警告:显然,如果您使用的是例如“代码>响应。内容。请参阅以下答案: