1

これを明確にしたかっただけです。クライアントを処分するという点で、これは安全ですか?

using (WebClient client = new WebClient(TimeoutInSeconds))
{
   client.DownloadDataAsync(new Uri(par.Base_url));
   client.DownloadDataCompleted += (sender, e) =>
   {
       //code that checks e.Result
   }
} 

および関連する質問:クライアントがスコープ外に出た(参照がない)場合、適切に破棄せずに、メモリをデータから削除できますか?

また、クライアントが処分された場合、どこにe.Result存在しますか?誰かがこれを明確にすることができますか?

4

1 に答える 1

1

.NET 4.0 では、クラスはからメソッドをWebClient継承します。メソッドをオーバーライドしないため、クラスを破棄すると、基本クラスからクリーンアップが実行されるだけです。つまり、のコンテナーからコンポーネントがあれば削除され、イベントが発生します。サイトを割り当てたり、イベントを購読したりしていないので、電話をかける必要はまったくありません。DisposeSystem.ComponentModel.Componentprotected virtual void Dispose(bool disposing)ISiteDisposedDisposedDispose

コードは確かに失敗するように見えますが、少なくとも .NET 4.0 では失敗しません。

于 2012-10-25T15:26:34.157 に答える