c# – “获得处置关闭”是什么意思?
发布时间:2020-12-15 07:58:07 所属栏目:百科 来源:网络整理
导读:我有以下代码: 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.Q
我有以下代码:
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)); (会话变量加下划线作为罪魁祸首). 虽然ForEach方法采用lamba表达式来创建一个围绕变量会话的闭包,但我没有看到在执行此代码时可能会处理它的方法.也许reSharper认为ForEach可以并行执行某种任务,或者保存Action<>在以后的某个时间,从技术上来说,它可能会被释放,而匿名函数仍然可以在内存中访问. 我安全忽略这个警告吗?有没有办法可以重新格式化我的代码以防止出现此警告?这段代码确实存在危险吗? 我习惯于reSharper比我更聪明,所以我想知道究竟发生了什么. 解决方法
因为session包含在using语句中,所以LINQ执行可以在枚举之前执行.
Resharper警告这可能会导致异常,因为在枚举dbRecipes时,会话可能已被释放. 老实说:我不确定上面的代码是否会以警告的方式失败. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |