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

반응형

'C#' 카테고리의 다른 글

C# .NET Framework 4.8 프로젝트에서 SQLite 사용하는 방법  (0) 2024.11.12
csc로 라이브러리 만들기  (0) 2022.12.09
접근 제한자  (0) 2022.12.08
C# 배포 파일 만들기  (0) 2022.12.03