为什么我会收到带有此代码的“进入已处置的封闭件”警告

时间:2018-10-01 13:50:08

标签: c# closures

我有以下代码(使用ImageSharp):

using (var I = Image.Load<Rgb24>(Picture))
{
    // calculate the hash
    var T = Task.Factory.StartNew(() => CalculateHash(I));
    var Hash = T.Result; <- I put this as a test

    ...
}

我在CalculateHash方法上收到带有“ I”的“访问已关闭的封闭”警告。

这是代码的简化版本;在正常的代码中,我并行执行一些不同的过程,并等待它们全部完成。

在此示例中,我在“使用”上下文中显式等待任务的结果,因此不应在任务完成之前处理闭包。

我为什么收到此消息?

1 个答案:

答案 0 :(得分:0)

JetBrains在这里提供了一些帮助: https://www.jetbrains.com/help/resharper/2018.2/AccessToDisposedClosure.html

看来,在“使用”上下文中明确等待任务的结果是不相关的;您仍然可以在“使用”范围之外继续使用我。