개발실

[C#] Task.Wait()가 deadlock 걸리는 경우

copycd 2020. 9. 10. 10:09
반응형
원작자

https://social.msdn.microsoft.com/Forums/vstudio/en-US/65a5f291-e4bf-4327-a4fa-b42b21add0e2/how-there-can-be-deadlock-in-taskwait?forum=csharpgeneral

 

 

위예를 보면, DeadLock이 걸린다.

왜 걸리는지 보면,  

 

첫번째 await를 만나는 순간  DoWorkAsync() 함수를 벗어나게되고,

button1_click() 함수에서

task.Wait()에 메인 UI 쓰레드가 lock이 걸리게 된다.

 

첫번째 await의 Delay 가 끝나고 다음 줄로 실행을 옮겨야 하는데

이걸 실행하는 것이 메인 UI 쓰레드 인데,  아까 말했듯이

메인 UI 쓰레드는 DoWorkAsync가 끝나기를 기다리고 있다.

 

맞다, 서로 어쩌지 못하는 DeadLock 상태다.

 

여러가지 솔루션이 있는데, 아래걸 써보자.

 

// await가 꼬여있는경우, 잘 사용하자.

ConfigureAwait(false)

반응형