我有一个异步资源,我想让它可以自动关闭。我的资源旋转一个线程并轮询内部读者。
我应该阻止关闭方法,直到内部资源关闭或没问题。
我的代码是这样的......
public class MyReader implements AutoClosable {
ActualReader readerImpl = ...;
public void close() {
shutdownRequested.set(true);
}
public void start() {
while(!shutdownRequested) {
int someInt = readerImpl.poll(100);
}
readerImpl.close()
}
}
答案 0 :(得分:1)
您的资源应该是异步的。因此,该方法不应阻止。
答案 1 :(得分:1)
Ẃ这个规则可能有合理的例外,我会说一般你应该阻止close()
。
基本原理: AutoCloseable' s close()
建议抛出一般的异常。虽然没有义务抛出这样的例外(现在你没有这样做),但你基本上禁止自己在将来改变它。通过使close()
的内部逻辑异步,您无法真正传递关闭资源时可能发生的任何错误行为。