为什么ISourceBlock<TOutput>.LinkTo
会返回一个可以取消链接链接的IDisposable?
它似乎不适合使用IDisposable接口,我想不出任何理由你想编写一个特别需要IDisposable的using语句,例如:
using (var unlinkHandle = Foo.LinkTo(Bar)) {
// run some data items through the flow
} // compiler unlinks Bar from Foo here by calling unlinkHandle.Dispose()
当然,IDisposable表示必须确定性地清理的资源,并且通常是一个错误(或至少是一个缺陷),不在实现IDisposable的实例上调用Dispose;这不是这里的情况。在这个API中使用IDisposable而不是定制的界面类型,似乎“可爱”和/或懒惰。
我是正确的......还是错过了什么?
(如果ISourceBlock<TOutput>.LinkTo
返回它的参数会不会更好,所以你可以写一个像Foo.LinkTo(Bar).LinkTo(Zed)
这样的链?可能有一个不同的(扩展)方法来取消Bar的取消链接来自Foo。)