“访问已处理的关闭”是什么意思?

2023-11-26

我有以下代码:

public void DequeueRecipe(AuthIdentity identity, params Guid[] recipeIds)
{
   using (var session = GetSession())
   {
      var recipes = (from r in recipeIds select new Models.Recipes {RecipeId = r}).ToArray();

      var dbRecipes = session.QueryOver<Models.QueuedRecipes>()
         .Where(Expression.Eq("UserId", identity.UserId))
         .Where(Expression.InG("Recipe", recipes))
         .List<Models.QueuedRecipes>();

      using (ITransaction transaction = session.BeginTransaction())
      {
         dbRecipes.ForEach(r => session.Delete(r)); // <-- Warning
         transaction.Commit();
      }
   }
}

reSharper 向我发出警告:

访问已处理的封闭物

在线上:

dbRecipes.ForEach(r => session.Delete(r));

(The session变量被下划线标为罪魁祸首)。

虽然这是真的ForEach方法采用 lambda 表达式,该表达式在变量周围创建一个闭包session,我看不到执行此代码时可能会处理它的方法。也许 reSharper 认为ForEach可能会并行执行某种任务,或者保存该任务Action<>稍后,因此从技术上讲,当匿名函数在内存中仍然可访问时,它可能会被处理。

忽略这个警告我安全吗?有没有办法重新格式化我的代码以防止出现此警告?这段代码确实存在危险吗?

我已经习惯了 reSharper 比我聪明,所以我想确切地了解到底发生了什么。


Because session包含在 using 语句中,并且 LINQ 执行可以推迟到枚举它为止。

Resharper 警告这可能会导致异常,因为到时候dbRecipes被枚举,则session本来可以被处置的。

老实说:我不确定上面的代码是否会以警告的方式失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“访问已处理的关闭”是什么意思? 的相关文章

随机推荐

  • firebase 消息服务可以 android:exported="false" 吗?

    想确认是否可以设置android exported false 例如 ID 服务和消息服务 我通过保持测试android exported false 和通知工作正常
  • param: _* 在 Scala 中意味着什么?

    作为 Scala 2 9 1 的新手 我有一个List Event 并想将其复制到Queue Event 但以下语法会产生Queue List Event 反而 val eventQueue Queue events 由于某种原因 以下工作
  • 了解 iBeacon 数据:功率字段和其他字节

    我是蓝牙系统的新手 我正在尝试了解新的苹果技术 iBeacon 使用的数据 已经有一些很好的答案解释了它是如何工作的 我一直在阅读我能找到的所有内容 特别是蓝牙规范 尽管如此 我仍然遗漏了一些要点 我将首先举一个例子 我正在使用设置广告数据
  • 如何在linux中使用cx_freeze创建要在windows中使用的包

    如何在 Linux 中使用 cx freeze 创建一个可在 Windows 中使用的包 如 exe 或 bin 文件 我在 Linux 中测试了 cx freeze 但在 Linux 和 Windows 中制作软件包是未知的 例如 cxf
  • 将 VB.NET Winforms 应用程序移植到 C#

    是否有任何 好的 资源可将 VB NET winforms 应用程序移植到 C 我确信有软件可以翻译代码 但我希望同时重构代码 保持当前的形式是有问题的 因为它使用了 VB NET 允许的一些 不良设计 实践 并且会使未来的维护进一步复杂化
  • 如果 chrome 开发工具打开,AJAX 可以工作,但如果 chrome web 工具关闭,AJAX 就不行?

    我正在通过 ajax 加载 json 文件 如果 Chrome 开发工具打开 一切都会完美运行 如果 Chrome 开发工具关闭 则会失败 值得庆幸的是 即使关闭时 开发工具仍然会继续做它的事情 所以我仍然可以看到我得到的异常 Failed
  • C#:枚举中的按位运算符(MVC 中的自定义授权)

    我目前正在阅读一篇文章 但我不太明白这是如何与逻辑运算符一起使用的 谁能向我解释一下吗 例如 如果我想与客户 员工 主管和管理员建立 4 级证券 Serializable Flags public enum WebRoles custome
  • UnsatisfiedLinkError:java.library.path中没有opencv_java249

    在我的 Mac 上运行一段代码时遇到一些问题 有人给我写了一个图像分析 java 应用程序 但当我尝试在 netbeans 上运行它时 我不断收到此错误 运行 线程 主 java lang UnsatisfiedLinkError 中出现异
  • Guava 中有类似 Function Java 的 Effect 的东西吗?

    我知道纯函数式编程的目标之一是消除可变性 从而排除副作用 但让我们面对现实吧 即使存在所有函数式编程库 Java 也不是一种函数式语言 事实上 一些 FP 图书馆似乎知道并期望这一点 例如 在函数式 Java 中 有Effect班级 在 J
  • C 中带符号和无符号变量的环绕解释?

    我在 C 规范中读到了一些无符号变量 特别是无符号短int 执行一些所谓的环绕关于整数溢出 尽管我在有符号变量上找不到任何东西 除了我留下的未定义的行为 我的教授告诉我 他们的价值观也被包裹起来 也许他只是指海湾合作委员会 我认为这些位只是
  • 删除由 ::before 伪选择器添加的元素

    我有以下情况 样式是在SASS中完成的 并且省略了不必要的样式 header before position absolute height 0 5rem 这会在应用程序的菜单栏顶部创建一个栏 在某些情况下 必须删除该栏 我读过类似的问题t
  • 如何更新sql server中的前100条记录

    我想更新 SQL Server 中的前 100 条记录 我有一张桌子T1有字段F1 and F2 T1有200条记录 我想更新F1字段中的前 100 条记录 我怎样才能根据TOP 100在 SQL Server 中 注意 括号是必需的UPD
  • Spring boot可以根据属性文件的内容动态创建端点吗?

    到目前为止 我正在创建这样的端点 RequestMapping value test method RequestMethod POST public ResponseBody String indexPost HttpServletReq
  • 用于获取整棵树的 JPA 查询

    我有一个类对所有类别进行建模 并且它们可以按层次结构排序 Entity Table name categories public class Category Id GeneratedValue strategy GenerationTyp
  • 泽西岛多种农产品

    我正在关注球衣教程here弄清楚如何产生多个哑剧输出 从他们的网站来看 这是推荐的方式 GET Produces application xml application json public String doGetAsXmlOrJson
  • 当 pppd 处于活动状态时向 SIM900 发送 AT 命令

    我有一个连接了 SIM900 GSM 附加板的 Raspberry Pi 我已成功与以下设备建立 GPRS 连接pppd依照指示本指南 针对不同的GSM模块 但步骤是相同的 我想定期发送一条 AT 命令 AT CCLK 到SIM900检查时
  • 如何批量上传大文件?

    我有一个小文件共享网页 可以免费使用它 我想上传 0mb 到 1GB 之间的文件 我已经用谷歌搜索了两天了 但找不到任何我需要的东西 我的网页 http boxy tigyisolutions hu不过我现在只能上传20 30mb 我想一次
  • MySQL 查询调优 - 为什么使用变量中的值比使用文字慢得多?

    更新 我自己在下面回答了这个问题 我正在尝试解决 MySQL 查询中的性能问题 我认为我看到的是 将函数的结果分配给变量 然后运行 SELECT 并与该变量进行比较相对较慢 然而 如果为了测试的目的 我将与变量的比较替换为与我知道该函数将返
  • 多部分上传文件servlet [重复]

    这个问题在这里已经有答案了 如何上传文件并获取表单的其他参数 我想在 Java servlet 中处理多部分请求 要浏览并选择要上传的文件 您需要
  • “访问已处理的关闭”是什么意思?

    我有以下代码 public void DequeueRecipe AuthIdentity identity params Guid recipeIds using var session GetSession var recipes fr