Задержка отмены загрузки в Xamarin Forms

Мне нужно скачать файл в формате pdf и сохранить на устройстве. Я использовал процесс WebClient для загрузки файла и отображения прогресса при его загрузке.

CancellationTokenSource Token= new CancellationTokenSource(); //Initialize a token while start download
webClient.DownloadFileTaskAsync(new Uri(downloadurl), saveLocation); // Download file

Загрузка работает корректно. Чтобы отменить текущую загрузку, я использовал canceltokensource, как указано в ссылке ниже.

https://docs.microsoft.com/en-us/dotnet/standard/threading/cancellation-in-managed-threads

Token.Cancel(); //Cancellation download

try
{
// check whether download cancelled or not
Token.ThrowIfCancellationRequested();
if(Token.IsCancellationRequested)
{
  //Changed button visibility
}
}
catch (OperationCanceledException ex)
{
}

Для отмены загрузки требуется больше секунд. Не могли бы вы предложить мне уменьшить задержку при отмене загрузки?


comment
Не могли бы вы опубликовать полный код, который отменяет задачу загрузки?   -  person Eren Shen    schedule 29.10.2017


Ответы (1)


Мы должны зарегистрировать токен в веб-клиенте, чтобы отменить асинхронный процесс перед загрузкой асинхронного процесса. Мы должны поддерживать порядок, как показано ниже,

//Initialize for download process
WebClient webClient = new WebClient();
CancellationTokenSource token = new CancellationTokenSource();

//register token into webclient
token.Register(webClient.CancelAsync);
try
{
  webClient.DownloadFileTaskAsync(new Uri(downloadurl), saveLocation); // Download a file
}
catch(Exception ex)
{
  //Change button visibility
}

Token.Cancel(); //Cancellation download put in cancel click button event

Это не занимает даже миллисекунд, а отмена отлично работает как на устройствах Xamarin.Android, так и на устройствах Xamarin.iOS.

person cheran    schedule 08.11.2017