Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将使用等待任务。运行casue“;进入已处置的封闭区”;错误? 代码示例 公共异步任务重任务() { 使用(var res=new BigResource()) { 等待任务。运行(()=>service.Do(res)); } }_C#_Async Await_Resharper - Fatal编程技术网

C# 将使用等待任务。运行casue“;进入已处置的封闭区”;错误? 代码示例 公共异步任务重任务() { 使用(var res=new BigResource()) { 等待任务。运行(()=>service.Do(res)); } }

C# 将使用等待任务。运行casue“;进入已处置的封闭区”;错误? 代码示例 公共异步任务重任务() { 使用(var res=new BigResource()) { 等待任务。运行(()=>service.Do(res)); } },c#,async-await,resharper,C#,Async Await,Resharper,我有一些类似于上面的代码,ReSharper警告我在使用res实例时“访问已处置的闭包” 如果我没有使用wait关键字,我知道res实例可能会在服务尝试访问它时被释放 但是我认为如果我使用wait关键字,执行HeavyTask方法的线程将不会继续,直到Task.Run完成,并且应该不会有访问已处理闭包的风险 请帮助我了解哪里出了问题,以及解决此问题的首选模式。您不会出错。在处置后,它将无法访问res。问题很简单,ReSharper不知道这一点Task.Run可以存储委托,以便以后执行。您知道它不

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

如果我没有使用
wait
关键字,我知道
res
实例可能会在
服务尝试访问它时被释放

但是我认为如果我使用
wait
关键字,执行
HeavyTask
方法的线程将不会继续,直到
Task.Run
完成,并且应该不会有访问已处理闭包的风险


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

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

虽然我可以理解ReSharper在其他每次函数调用中的行为,但知道任务是什么并不是特例。Run做的有点悲哀:/@poke我同意,但是我想补充一点,BCL有更多的方法被使用,而不是更多的方法应该得到相同的特殊外壳。这与Task.Run无关,而是与async方法有关,async方法将用于生成完全不同的代码(所谓的async状态机)。所以Resharper不仅仅知道结果代码。@DmytroMukalov这不是真的,您可以通过查看是否为lambda未捕获的变量生成警告来轻松检查这一点。@hvd我不确定什么是真的?