Я не знаю точно, может ли WebClient
нормально собираться мусором или нет, когда выполняется асинхронная операция, потому что могут быть внутренние ссылки - но главный вопрос: имеет ли это значение?
До тех пор, пока достаточное количество WebClient
остается "живым" для обслуживания запроса и вызова вашего обработчика, имеет ли значение, является ли сам основной объект WebClient
сборщиком мусора?
В документации WebClient
ничего не говорится о необходимости хранить ссылку (в отличие, например, от System.Threading.Timer
docs ), поэтому я думаю, что разумно предположить, что это нормально.
В данном конкретном случае ваш делегат имеет ссылку на WebClient
, поэтому, если на него ссылается сам делегат, WebClient
не может быть. Мое обоснованное предположение состоит в том, что некоторая часть системы где-то должна удерживать обратный вызов, чтобы знать, что делать, когда поступает сетевой трафик, и этот обратный вызов в конечном итоге (косвенно) приведет к вашему делегату, так что все в порядке .