및 : 교착 상태의 사용과 원인의 다른 사용
await
를 사용하여 결과를 얻으려고했습니다. 그러나이 방법은 실제로 동기화 및 실행 스레드 차단에서 미션의 완료를 수행하고 있기 때문에 중단됩니다. Task.Result
라고 부르면 실제로 실행 스레드를 차단하고 결과를 기다립니다. await
메소드 자체에는 비동기 작업 (REST API 호출)이 포함되어 있기 때문에 동기 대기를 시도하면 죽은 자물쇠가 발생합니다. 기본 실행 스레드는 API 호출 결과를 기다리고 있으며 API 호출은 기본 스레드가 계속 실행되기를 기다리고 있습니다. Task.Result
를 사용하여 실행 스레드를 해제하여 API가 비동기를 호출하여 완료 할 수 있습니다. 작업이 완료된 후 복구를 수행하고 데드 잠금 장치를 유발하지 않고 작업에서 결과를 얻으십시오.
<code class="language-csharp">[Test] public async void CheckStatusTwiceResultTest() { Assert.IsTrue(CheckStatus().Result); // 此处挂起 Assert.IsTrue(await CheckStatus()); }</code>간단히 말해서, 비동기 코드를 효과적으로 처리하려면 비동기 메소드를 사용할 때 죽은 자물쇠를 유발할 수 있기 때문에
를 피해야합니다. Task.Result
위 내용은 `bewait` vs.`task.result ': 언제 각각을 사용해야하고 왜 교착 상태를 일으키는가?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!