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的风险。设置关闭。
请帮助我了解我出了什么问题,以及解决该问题的首选方式。
答案 0 :(得分:2)
您没做错。销毁后将无法访问res
。问题仅仅是ReSharper不知道。 Task.Run
可以存储委托以便以后执行。您知道它不会执行此操作的唯一方法是因为您知道Task.Run
会执行的操作。 ReSharper不会。