Что происходит с выдающимися асинхронными операциями .NET WebClient, когда приложение WinForm закрывается? - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь понять, что именно происходит с выдающимися асинхронными операциями WebClient при закрытии приложения WinForms.У меня на самом деле нет проблемы, мой вопрос вызван желанием понять точный поток.

Приложение использует следующий шаблон, когда запрашивается загрузка:

        using (WebClient wc = new WebClient())
        {
                wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(my_DownloadProgressChanged);
                wc.DownloadFileCompleted += new AsyncCompletedEventHandler(my_DownloadFileCompleted);

Обработчики событий - это методына форме.Одна из моих проблем заключается в том, что я не хочу, чтобы те вызывались, когда форма уже закрыта.Я мог бы хранить ссылки на WebClient и - = при закрытии формы, но я хотел бы не выполнять ненужную работу, чтобы избежать новых проблем.

Вот вопросы, которые у меня есть:

  • почему нормально утилизировать WebClient до завершения асинхронных операций?
  • нужно ли отменять регистрацию обработчиков при завершении работы основного окна, и что происходит, если мы этого не делаем?Мое наблюдение заключается в том, что если я закрываю форму, ни один из асинхронных обратных вызовов не вызывается, но почему именно, как именно он завершает работу?

Я рассмотрел код WebClient, но не смог разобраться в этом.Заранее спасибо.

1 Ответ

0 голосов
/ 08 октября 2018

почему нормально утилизировать WebClient до завершения асинхронных операций?

Если посмотреть на справочный источник для WebClient, это не выглядит так, как на самом делелюбая конкретная реализация для метода Dispose. не должно быть безопасным для удаления любых IDisposable и ожидать успешного завершения асинхронных операций, но в этом случае это может сработать, потому что удаление веб-клиента ничего не делает для прерывания открытых соединений.

Что касается вашего вопроса о том, что происходит при выходе из приложения, операционная система прервет все открытые соединения после завершения процесса.

...