및 : 교착 상태
및
비동기 프로그래밍의 차이는 약간 중요합니다. 이 기사는 둘의 차이점과 일반적인 교착 상태 장면을 분석합니다.
는 현재 메소드의 실행 비동기식입니다. 이 방법의 상태가 캡처되었고 미완성 작업이 발신자에게 반환되었습니다. 대기 표현식이 완료되면 메소드의 나머지 부분이 지속적으로 작동 할 예정입니다.
죽은 잠금 장면 await
Task.Wait
오류가 사용되는 다음 코드 예제를 고려하여 가 죽은 자물쇠로 이어집니다.
이 코드에서 메소드는 현재 스레드를 차단하여 컬렉션의 모든 작업이 완료되기를 기다립니다. 그러나 각 메소드에는 실행을 방해하는 표현이 포함되어 있습니다.
호출 스레드가 에서 차단되면 작업의 표현식을 완료 할 수 없습니다. 이는 호출이 완료되지 않으면 호출 스레드를 해제 할 수없는 경우 작업이 계속 실행될 수 없기 때문에 죽은 자물쇠를 생성합니다.
왜 블록이 죽은 자물쇠를 피하기 위해 기다리고있는 이유
또는 잠금과 같은 장애물 대기를 사용하면이 장면에서 데드 잠금 장치가 발생하지 않습니다. 이는 별도의 스레드에서 작업이 실행되는 것을 방해하지 않기 때문입니다. 장애물 대기는 지연 통화 방법의 실행 일 뿐이며 작업이 계속되고 마지막으로 완료 될 수 있습니다.
결론 Task.Wait
죽은 자물쇠를 피하려면 와 의 차이점을 이해해야합니다. 일반적으로 는 항상 비동기 코드로 사용되어 호출 스레드가 유지되도록합니다.
위 내용은 대기 대 태스크.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!