콘솔 애플리케이션의 비동기 호출: '위' 및 '아래' 신화 해체
C#에서 비동기 메서드를 호출할 때 호출 스택의 "위" 및 "아래"에서 동기화가 유지되어야 한다고 일반적으로 주장됩니다. 그러나 이 교리는 콘솔 애플리케이션에는 적용되지 않습니다.
이 코드 조각을 고려하십시오.
public static async Task<int> SumTwoOperationsAsync() { // Simulate time-consuming operations var firstTask = GetOperationOneAsync(); var secondTask = GetOperationTwoAsync(); // Sum the results of the operations return await firstTask + await secondTask; } private static async Task<int> GetOperationOneAsync() { await Task.Delay(500); // Simulating operation delay return 10; } private static async Task<int> GetOperationTwoAsync() { await Task.Delay(100); // Simulating operation delay return 5; }
"위 및 아래" 규칙에 따르면 Main 함수를 표시하는 것이 논리적인 것 같습니다. , 여기서 SumTwoOperationsAsync는 비동기식으로 호출됩니다. 그러나 이 가정은 올바르지 않습니다. 콘솔 애플리케이션은 비동기 진입점을 지원하지 않습니다. 그렇게 하면 "진입점을 'async' 수정자로 표시할 수 없습니다."라는 컴파일 오류가 발생합니다.
그렇다면 콘솔 애플리케이션에서 비동기 코드를 어떻게 호출합니까? 두 가지 기본 접근 방식이 있습니다.
static void Main() { MainAsync().Wait(); // Alternatively, to avoid wrapping exceptions in AggregateException: // MainAsync().GetAwaiter().GetResult(); } static async Task MainAsync() { // Async code goes here }
static void Main() { AsyncContext.Run(() => MainAsync()); } static async Task MainAsync() { // Async code goes here }
비동기 콘솔 애플리케이션에 대한 더 포괄적인 통찰력을 보려면 제공된 블로그 게시물을 방문하세요. 모든 시나리오에서 "위 및 아래" 규칙이 원활하게 적용되지 않을 수도 있다는 점을 기억하세요.
위 내용은 C# 콘솔 애플리케이션에서 비동기 코드를 올바르게 호출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!