C#

Task.Result deadlock solution

Falto 2025. 1. 2. 14:41
반응형

아래 C# WPF 소스 코드를 실행시키면 deadlock에 걸려서 GUI 창이 안 뜬다.

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    private async Task<bool> Invert(bool x)
    {
        await Task.Delay(1);
        return !x;
    }
    protected override void OnSourceInitialized(EventArgs e)
    {
        base.OnSourceInitialized(e);
        bool x = Invert(true).Result;
    }
}

다음과 같이 Task.Run()으로 호출할 함수를 감싸주면 deadlock에 걸리지 않는다.

bool x = Task.Run(()=>Invert(true)).Result;

 

Reference

https://stackoverflow.com/a/32429753/14367566

반응형