LinkTo返回一个IDisposable进行取消链接 - 这是合适的设计吗?

时间:2014-03-27 17:46:23

标签: task-parallel-library api-design tpl-dataflow

为什么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。)

0 个答案:

没有答案