【发布时间】:2014-01-26 18:49:54
【问题描述】:
我已经看到在CancellationTokenRegistration 结果上使用Cancellation.Register 和using 子句的代码:
using (CancellationTokenRegistration ctr = token.Register(() => wc.CancelAsync()))
{
await wc.DownloadStringAsync(new Uri("http://www.hamster.com"));
}
我知道你应该确保你是 Dispose 和 IDisposable,但为什么它甚至实现了 IDisposable?它必须释放哪些资源?它唯一的方法是关于平等的。
如果你不Dispose 会发生什么?你泄露了什么?
【问题讨论】:
-
这是 dispose 滥用,它应该有一个 Unregister() 方法。
-
@HansPassant:是否“滥用”取决于一个人是否认为
IDisposable.Dispose存在是为了清理资源,或者是为了确保需要完成的事情,完成(资源清理是“必要行动”的主要类型,但不是唯一的)。 -
@HansPassant - 它也在 asp.net MVC 中大量使用。如果框架作者自己做,我不认为这是滥用。
标签: c# .net task-parallel-library idisposable cancellation-token