使用 await on Task.Run casue "access to disposed closure" 会出错吗?

Will using await on Task.Run casue "access to disposed closure" error?

代码示例

public async Task HeavyTask()
{
  using(var res = new BigResource())
  {
    await Task.Run(() => service.Do(res));
  }
}

我有一些代码与上面类似,ReSharper 在使用 res 实例时警告我 "Access to disposed closure"。

如果我没有使用 await 关键字,我知道 res 实例 可能 service 尝试访问时被释放它。

但是我觉得如果我使用await关键字的话,执行HeavyTask方法的线程不会继续执行,直到Task.Run完成,应该没有风险访问已处置的闭包。

请帮助我了解哪里出了问题,以及解决此问题的首选模式是什么。

你不会错的。这将不会在处理后访问 res。问题很简单,ReSharper 不知道这一点。 Task.Run 可以 存储委托以便稍后执行。您知道它不会那样做的唯一方法是因为您知道 Task.Run 的作用。 ReSharper 没有。