当 WinForm 应用程序关闭时,未完成的 .NET WebClient 异步操作会发生什么情况?

What happens to outstanding .NET WebClient async operations when WinForm app closes?

我想了解,当 WinForms 应用程序关闭时,WebClient 未完成的异步操作到底发生了什么。我实际上没有问题,我的问题是想了解确切的流程。

应用程序在请求下载时使用以下模式:

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

事件处理程序是表单上的方法。我担心的问题之一是我不希望在表单已经关闭时调用它们。我可以保留对 WebClient 和 -= 的引用,但我不想做不必要的工作以避免新问题。

以下是我的问题:

我查看了 WebClient 代码,但我无法弄清楚这些东西。提前致谢。

why is it ok to Dispose WebClient before Async operations complete?

查看 WebClient 的 Reference Source,看起来它实际上没有 Dispose 方法的任何具体实现。 不应该 处置任何 IDisposable 并期望异步操作成功完成,但在这种情况下它可能会工作,因为处置 Web 客户端不会做任何事情来中止打开连接。

关于您关于应用程序退出时会发生什么的问题,操作系统将在进程结束时终止所有打开的连接。