У меня есть метод в клиенте WPF для веб-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 минут (я точно не рассчитал время), например, для моего подключения для файлов размером менее + -500 МБ.
Действительно ли это исключение из-за тайм-аутаи, если да, как я могу настроить await
для обеспечения настраиваемого времени перед отменой задачи;предполагая, что задача отменена из-за тайм-аута.Он никогда не отменяется ни для какого другого сценария, кроме как при попытке загрузить большой файл.