【发布时间】:2021-11-12 13:41:35
【问题描述】:
我想检查所有方法中的 dispose:
public class WebSocketClient : IDisposable
{
private ClientWebSocket _socket;
private bool _isDisposed;
//methods
public void SetBuffer(int receiveBufferSize, int sendBufferSize) =>
_socket.Options.SetBuffer(receiveBufferSize, sendBufferSize); //How check dispose?
//other methods
protected virtual void Dispose(bool disposing)
{
if (!_isDisposed)
{
if (disposing)
{
_socket.Dispose();
}
_isDisposed = true;
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
我添加了检查 dispose 的方法,如果对象未释放,则运行 acrion:
public async Task CallWithCheckDispose(Func<Task> func)
{
if (!_isDisposed)
await func.Invoke();
else
throw new ObjectDisposedException(GetType().Name);
}
public async Task CallWithCheckDispose(Action func)
{
if (!_isDisposed)
func.Invoke();
else
throw new ObjectDisposedException(GetType().Name);
}
并使用它:
public async Task SetBuffer(int receiveBufferSize, int sendBufferSize) =>
await CallWithCheckDispose(() =>
_socket.Options.SetBuffer(receiveBufferSize, sendBufferSize);
);
但我认为这不是最好的解决方案 还有其他解决办法吗?
【问题讨论】: