Что означает «Доступ к закрытому закрытию»?

У меня есть следующий код:

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));

(Thesession переменная подчеркивается как виновник).

Хотя это правдаForEach метод принимает выражение лямбы, которое создает замыкание вокруг переменнойsessionЯ не вижу способа, где он может быть удален при выполнении этого кода. Возможно, ReSharper думаетForEach может выполнить какое-то задание параллельно или сохранитьAction<> позднее, таким образом, технически он может быть удален, пока анонимная функция все еще доступна в памяти.

Могу ли я проигнорировать это предупреждение? Есть ли способ, которым я могу переформатировать свой код, чтобы предотвратить появление этого предупреждения? Действительно ли опасность представляет этот код?

Я привык повторять, что умнее меня, поэтому я хотел бы точно понять, что происходит.

Ответы на вопрос(1)

Ваш ответ на вопрос