将在Task.Run上使用await导致“访问已配置的关闭”错误?

时间:2018-08-28 09:22:38

标签: c# async-await resharper

代码示例

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

我有一些类似于上面的代码,ReSharper在使用res实例时警告我有关“访问已处置的闭包”的信息。

如果我不使用await关键字,那么我知道res尝试访问service实例 时会被丢弃。

但是我认为,如果我使用await关键字,则在HeavyTask完成之前执行Task.Run方法的线程将不会继续,并且应该没有访问a的风险。设置关闭。

请帮助我了解我出了什么问题,以及解决该问题的首选方式。

1 个答案:

答案 0 :(得分:2)

您没做错。销毁后将无法访问res。问题仅仅是ReSharper不知道。 Task.Run 可以存储委托以便以后执行。您知道它不会执行此操作的唯一方法是因为您知道Task.Run会执行的操作。 ReSharper不会。