lambda事件订阅是否会造成内存泄漏?

Jag*_*ggu 15 c#

此代码是否会造成内存泄漏?

WebClient client = new WebClient();

client.DownloadDataCompleted += (sen, args) => {

};
client.DownloadData("http://foo.bar");
Run Code Online (Sandbox Code Playgroud)

因为没有办法真正取消订阅活动.我可以说我们绝不能使用lambda进行活动订阅吗?

Jon*_*eet 11

只要你没有保留WebClient自身,它就不会产生内存泄漏- 当它有资格进行垃圾收集时,也可以收集事件处理程序目标.你通常不会WebClient长时间保持这种状态 - 它们通常被用作一次性物体.

另外,lambda表达式没有使用任何变量this,所以它可能是由一个没有目标的静态方法实现的......我假设你关注的真实情况有一个更有趣的lambda体.