Как обернуть Webclient.DownloadFileAsync в приемлемый метод? - PullRequest
1 голос
/ 14 октября 2019

Я хотел бы обернуть метод WebClient.DownloadFileAsync , который на самом деле не является блокирующим, в метод , который возвращает задание и его можно ожидать до завершения загрузки .

Я понимаю логику, с которой связано включение в событие DownloadFileCompleted, как объяснено здесь (и во многих других сообщениях), но я бы хотел обернуть его во что-то более удобное для пользователя. И мои знания об асинхронном программировании довольно поверхностны.

Лучшее, что я могу придумать, - это обернуть метод DownloadFile (синхронный) в задание и вернуть его, но я много раз читал, что оборачиваем синхронный метод ва асинхронный - не очень хорошая практика

return Task.Run(() =>client.DownloadFile(fileUri, localPath));

На самом деле, впервые я встречаю асинхронный метод, который не является ожидаемым, есть ли причина, по которой его так считают?

Спасибо

1 Ответ

2 голосов
/ 14 октября 2019

Согласно приведенному выше комментарию @ JonSkeet ответ:

  • Метод DownloadFileAsync был задуман задолго до того, как был реализован await / async
  • Вызывается метод, который я искал DownloadFileTaskAsync , простой загрузчик асинхронных файлов, и нет необходимости переписывать оболочку
...