C#의 다양한 Async/Await 모드가 실행 시간에 어떤 영향을 미치나요?
비동기 대기: 대기 및 비대기(시작 후 무시)
자세한 코드 설명
다음 코드를 고려하세요.
<code class="language-csharp">static async Task Callee() { await Task.Delay(1000); } static async Task Caller() { Callee(); // #1 启动后忽略 await Callee(); // #2 >1s Task.Run(() => Callee()); // #3 启动后忽略 await Task.Run(() => Callee()); // #4 >1s Task.Run(async () => await Callee()); // #5 启动后忽略 await Task.Run(async () => await Callee()); // #6 >1s } static void Main(string[] args) { var stopWatch = new Stopwatch(); stopWatch.Start(); Caller().Wait(); stopWatch.Stop(); Console.WriteLine($"Elapsed: {stopWatch.ElapsedMilliseconds}"); Console.ReadKey(); }</code>
호출 로직
#1: 시작 후 무시하는 가장 간단한 방법입니다. #2: 기다리기만 하면 됩니다. #3: 스레드 풀 스레드에서 비동기 메서드를 시작하고 결과를 무시합니다. #4: 스레드 풀 스레드에서 비동기 메서드를 시작하고 비동기적으로 완료될 때까지 기다립니다. #5: #3과 동일합니다. #6: #4와 동일합니다.
Task.Run 및 비동기식 람다 표현식
Task.Run이 새 스레드를 시작하지만 Task.Run(async => ...)은 스레드에서 생성되는 Task.Factory.StartNew(async => ...)와 동일합니다. 풀 새 작업을 만들고 즉시 시작합니다.
시작 후 무시할 사항
시작 후 메서드가 무시되면 처리되지 않은 예외가 발생하여 애플리케이션이 중단될 수 있다는 점에 유의하는 것이 중요합니다. 따라서 사용하기 전에 영향을 신중하게 고려하는 것이 중요합니다.
위 내용은 다양한 비동기/대기 패턴이 C#의 실행 시간에 어떤 영향을 미치나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!