【发布时间】:2016-04-27 05:00:06
【问题描述】:
Visual Studio 代码分析在此方法中的 monitor 变量上生成警告“在失去范围之前处理对象”(CA2000)。
private void MonitorJob(IJob job, CancellationToken cancellationToken)
{
var monitor = new JobMonitor(job, _backend); // <- CA2000
try
{
var task = monitor.Run(cancellationToken);
_activeJobs[task] = monitor;
}
catch
{
monitor.Dispose();
throw;
}
}
我了解 CA2000 的作用,而且我通常能够找出我的代码违反规则的原因并进行适当的更改。
然而,在这种情况下,我很难过 - 这真的是误报,还是我遗漏了什么?
使用 Visual Studio 2015 企业版,面向 .NET 4.5,使用 C# 6。
【问题讨论】:
-
对于一个工具来说,Run() 方法总是 抛出异常并不明显。或者它可能会在以后被处理,因为你将它存储在 _activeJobs 中,假设你这样做了。只需取消警告即可。
-
不使用
using的原因是什么? -
@qxg 你在这里怎么用?
-
@zerkms
using(var monitor = new JobMonitor()) { var task ... }。监视器将被释放并抛出异常。 -
@qxg 你有没有注意到这条
_activeJobs[task] = monitor;行?
标签: c# visual-studio code-analysis