问题描述
public void dispose()
{
threadPool?.dispose();
GC.SuppressFinalize(this);
}
我得到的错误
错误 CA1063:Microsoft.Design:修改 'HandlerBase.dispose()' 所以 它调用 dispose(true),然后调用 GC.SuppressFinalize 当前对象实例(Visual Basic 中的“this”或“Me”),然后 返回。
所以我修改它以遵循 CA1063 预期的模式
protected virtual void dispose(bool disposing)
{
if (disposed)
{
return;
}
if (disposing)
{
threadPool?.dispose();
}
disposed = true;
}
public void dispose()
{
dispose(true);
GC.SuppressFinalize(this);
}
它不再意识到我正在处置该对象:
错误 CA2213:Microsoft.Usage:“HandlerBase”包含字段 'HandlerBase.threadPool' 是 Idisposable 类型:'SemaphoreSlim'。 更改“HandlerBase”上的 dispose 方法以调用 dispose 或 Close 这个字段。
解决方法
正如怀疑的那样,这似乎是 Roslyn 分析器的一个错误。
CA2213 triggers when using null conditional operator #291
它似乎在以后的版本中得到了修复(如果我没看错的话);但是,如果这对您不适用,或者它仍然无法正常工作,您可以取消警告/错误或仅删除 null 条件并手动检查 null:
if(threadPool != null)
threadPool.Dispose();