본문 바로가기
CSharp/CShap Tip

async void는 이벤트 핸들러에만 사용

by MonoSoft 2025. 3. 31.
728x90
반응형

async void는 이벤트 핸들러에만 사용

 

C#에서 async void 메서드는 예외 처리가 어렵고 
비동기 흐름을 제어하기 힘들기 때문에 
이벤트 핸들러에서만 사용해야 합니다.
그 외 상황에서는 반드시 Task 또는 Task<T>를 반환해야 합니다.

using System;
using Systehttp://m.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        try
        {
            await DoSomethingAsync();
        }
        catch (Exception ex)
        {
            Console.WriteLine($"예외 처리됨: {ex.Message}");
        }
    }

    static async Task DoSomethingAsync()
    {
        await Task.Delay(1000);
        throw new InvalidOperationException("에러 발생!");
    }

    // 잘못된 예시
    static async void WrongMethod()
    {
        await Task.Delay(500);
        throw new Exception("이 예외는 Main에서 catch할 수 없습니다!");
    }
}

●async void는 예외가 발생해도 호출한 쪽에서 catch 할 수 없습니다.
●Task를 반환하면 await로 흐름을 제어하고, 예외도 포착할 수 있습니다.
●단, async void는 이벤트 핸들러에서는 불가피하게 사용됩니다 
(예: button.Click += async (s, e) => { ... }).

 

 

728x90
반응형

댓글