> 백엔드 개발 > C++ > 다양한 비동기/대기 패턴이 C#의 실행 시간에 어떤 영향을 미치나요?

다양한 비동기/대기 패턴이 C#의 실행 시간에 어떤 영향을 미치나요?

Patricia Arquette
풀어 주다: 2025-01-12 13:28:42
원래의
440명이 탐색했습니다.

How Do Different Async/Await Patterns Impact Execution Time in C#?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿