我在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
允许在取消任务之前有一个可配置的时间;假设任务因超时而取消。除了我尝试上传一个大文件外,其他任何场景都不会取消它。