c# – “获得处置关闭”是什么意思?

c# – “获得处置关闭”是什么意思?,第1张

概述我有以下代码: public void DequeueRecipe(AuthIdentity identity, params Guid[] recipeIds){ using (var session = GetSession()) { var recipes = (from r in recipeIds select new Models.Recipes {Recip 我有以下代码:
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给了我警告:

Access to disposed closure

在线上:

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

(会话变量加下划线作为罪魁祸首).

虽然ForEach方法采用lamba表达式来创建一个围绕变量会话的闭包,但我没有看到在执行此代码时可能会处理它的方法.也许reSharper认为ForEach可以并行执行某种任务,或者保存Action<>在以后的某个时间,从技术上来说,它可能会被释放,而匿名函数仍然可以在内存中访问.

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

我习惯于reSharper比我更聪明,所以我想知道究竟发生了什么.

解决方法 因为session包含在using语句中,所以liNQ执行可以在枚举之前执行.

Resharper警告这可能会导致异常,因为在枚举dbRecipes时,会话可能已被释放.

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

总结

以上是内存溢出为你收集整理的c# – “获得处置关闭”是什么意思?全部内容,希望文章能够帮你解决c# – “获得处置关闭”是什么意思?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1245284.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存