교착 상태를 디버깅
이 기사는 단위 테스트에서 발생하는 교착 상태를 분석합니다. 처음 세 번의 테스트 (, CheckStatusTwiceResultTest
및 )는 성공적으로 실행되지만 는 매달립니다. 이것은 메소드에 액세스하기 위해
의 결합 된 사용에서 비롯된 문제를 가리 킵니다.
문제 : 및 CheckStatusTwiceResultTest CheckOnceResultTest
CheckOnceAwaitTest
a CheckStatusTwiceAwaitTest
객체의 속성은 작업이 완료 될 때까지 호출 스레드를 차단합니다. 이 경우, 는 비동기 CheckStatusTwiceResultTest
메소드의 결과를 동기화하려고 시도합니다. 비동기 컨텍스트 내 에서이 동기식 액세스는 교착 상태의 근본 원인입니다.
솔루션 : Result
await
CheckStatus
를 추가하면 교착 상태가 해결 될 수 있습니다.
권장 관행
및 혼합을 피하십시오. Task.Result
는 동기 컨텍스트에 적합합니다. 이 분리는 코드 선명도를 향상시키고 교착 상태를 방지합니다
await
의 잘못된 사용으로 인해 발생합니다. 모범 사례를 사용하고 전략적으로
위 내용은 `weait '및`result'를 모두 사용할 때 'CheckStatUstwiceresultTest'교착 상태가 된 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!