"폐기 된 폐쇄에 대한 접근"이란 무엇을 의미합니까?

마이크 크리스텐슨

다음 코드가 있습니다.

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

( session변수는 범인으로 밑줄이 그어져 있습니다.)

ForEach메서드는 변수 주위에 클로저를 만드는 람바 식을 사용 하는 것이 사실이지만 session이 코드가 실행될 때 처리 될 수있는 방법을 보지 못했습니다. 아마도 reSharper ForEach는 일종의 작업을 병렬로 실행하거나 Action<>나중에 저장할 수 있다고 생각할 수 있습니다 . 따라서 기술적으로는 익명 함수가 메모리에 계속 도달 할 수있는 동안 처리 될 수 있습니다.

이 경고를 무시해도 안전합니까? 이 경고가 나타나지 않도록 코드를 다시 포맷 할 수있는 방법이 있습니까? 이 코드가 제시하는 위험이 실제로 있습니까?

저는 reSharper가 저보다 똑똑한 데 익숙해 져서 무슨 일이 일어나고 있는지 정확히 이해하고 싶습니다.

미치 밀

sessionusing 문에 래핑되어 있기 때문에 열거 될 때까지 LINQ 실행이 지연 될 수 있습니다.

Resharper는 이로 인해 예외가 발생할 수 있다고 경고합니다. 시간 dbRecipes이 열거 session될 때까지는 폐기되었을 수 있기 때문 입니다.

솔직히 말씀 드리면 위의 코드가 경고 한대로 실패 할 수 있을지 모르겠습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

장기 실행 작업에 대한 매개 변수로서의 DBContext? 폐기 된 폐쇄에 대한 접근

분류에서Dev

폐기 된 폐쇄에 대한 접근

분류에서Dev

의미론이란 무엇을 의미합니까?

분류에서Dev

케이블 꼬임이란 무엇을 의미합니까?

분류에서Dev

TensorFlow에서 실험적이란 무엇을 의미합니까?

분류에서Dev

ATG에서 $ scope = global이란 무엇을 의미합니까 ..?

분류에서Dev

대화 형 쉘이란 무엇을 의미합니까?

분류에서Dev

'네트워크 구성'이란 무엇을 의미합니까?

분류에서Dev

"데이터 정규화"란 무엇을 의미합니까?

분류에서Dev

수업 잠금이란 무엇을 의미합니까?

분류에서Dev

최종 패킷 패킹이란 무엇을 의미합니까?

분류에서Dev

편집 가능이란 무엇을 의미합니까?

분류에서Dev

콜백이란 무엇을 의미합니까?

분류에서Dev

Google은 "기사 전문"이란 무엇을 의미합니까?

분류에서Dev

"함수"== 변수 유형이란 무엇을 의미합니까?

분류에서Dev

Azure : "제한"이란 정확히 무엇을 의미합니까?

분류에서Dev

내 불화 봇이 "권한 누락"이란 무엇을 의미합니까?

분류에서Dev

"사용자에게 권한이 없음"이란 무엇을 의미합니까?

분류에서Dev

라이브러리 구축이란 무엇을 의미합니까?

분류에서Dev

"필수 라이브러리 누락"이란 무엇을 의미합니까?

분류에서Dev

IEEE-754는 "교환 형식"이란 무엇을 의미합니까?

분류에서Dev

클라이언트 최적화 란 무엇을 의미합니까?

분류에서Dev

"호출 스택 버블 링"이란 무엇을 의미합니까?

분류에서Dev

Crashlytics : 컴파일러 생성이란 무엇을 의미합니까?

분류에서Dev

"끝에 0 비트 패딩"이란 무엇을 의미합니까?

분류에서Dev

"디스크 스트리밍"이란 무엇을 의미합니까?

분류에서Dev

"디스크 스트리밍"이란 무엇을 의미합니까?

분류에서Dev

연산자 오버로딩이란 무엇을 의미합니까?

분류에서Dev

Synaptic에서 "로컬 또는 구식"이란 무엇을 의미합니까?

Related 관련 기사

  1. 1

    장기 실행 작업에 대한 매개 변수로서의 DBContext? 폐기 된 폐쇄에 대한 접근

  2. 2

    폐기 된 폐쇄에 대한 접근

  3. 3

    의미론이란 무엇을 의미합니까?

  4. 4

    케이블 꼬임이란 무엇을 의미합니까?

  5. 5

    TensorFlow에서 실험적이란 무엇을 의미합니까?

  6. 6

    ATG에서 $ scope = global이란 무엇을 의미합니까 ..?

  7. 7

    대화 형 쉘이란 무엇을 의미합니까?

  8. 8

    '네트워크 구성'이란 무엇을 의미합니까?

  9. 9

    "데이터 정규화"란 무엇을 의미합니까?

  10. 10

    수업 잠금이란 무엇을 의미합니까?

  11. 11

    최종 패킷 패킹이란 무엇을 의미합니까?

  12. 12

    편집 가능이란 무엇을 의미합니까?

  13. 13

    콜백이란 무엇을 의미합니까?

  14. 14

    Google은 "기사 전문"이란 무엇을 의미합니까?

  15. 15

    "함수"== 변수 유형이란 무엇을 의미합니까?

  16. 16

    Azure : "제한"이란 정확히 무엇을 의미합니까?

  17. 17

    내 불화 봇이 "권한 누락"이란 무엇을 의미합니까?

  18. 18

    "사용자에게 권한이 없음"이란 무엇을 의미합니까?

  19. 19

    라이브러리 구축이란 무엇을 의미합니까?

  20. 20

    "필수 라이브러리 누락"이란 무엇을 의미합니까?

  21. 21

    IEEE-754는 "교환 형식"이란 무엇을 의미합니까?

  22. 22

    클라이언트 최적화 란 무엇을 의미합니까?

  23. 23

    "호출 스택 버블 링"이란 무엇을 의미합니까?

  24. 24

    Crashlytics : 컴파일러 생성이란 무엇을 의미합니까?

  25. 25

    "끝에 0 비트 패딩"이란 무엇을 의미합니까?

  26. 26

    "디스크 스트리밍"이란 무엇을 의미합니까?

  27. 27

    "디스크 스트리밍"이란 무엇을 의미합니까?

  28. 28

    연산자 오버로딩이란 무엇을 의미합니까?

  29. 29

    Synaptic에서 "로컬 또는 구식"이란 무엇을 의미합니까?

뜨겁다태그

보관