아 .. ..
c#에 쓰레드 얘기인데 이거 그냥 이케 하는 것이 좋겠어요.
Console.WriteLine("Hello, World! " + Thread.CurrentThread.ManagedThreadId);Main함수에서 관리되는 스레드 아이디 출력은 1이 나와요.
async void Run(){
await Task.Delay(0);
Console.WriteLine("RUN " + Thread.CurrentThread.ManagedThreadId);
await Task.Delay(0);
Console.WriteLine("RUN " + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(1000);
Console.WriteLine("RUN " + Thread.CurrentThread.ManagedThreadId);
await Task.Delay(1000);
Console.WriteLine("RUN " + Thread.CurrentThread.ManagedThreadId);
}이렇게 하였다면 1, 1, 1, 5가 나와요.
스레드에 1밀리초 이상 대기가 발생하면 다른 스레드로 위임해버려요.
이러면 그냥 중복 실행되어 데드락이 발생할 부분에 Task.Delay(1) 넣어서 다른 스레드로 위임 되도록 하면 되겠쩌. 설마 특수한 경우에 따라서 다른 스레드로 위임하지 않는 처리 방식도 사용되고 있는지도 모를 일이어요.
문득 예제를 작성해본 결과 맞는 것 같은데 커밋은 언제 ..
여담으로 Task.Yield()를 사용할 수도 있습니다.
await Task.Yield();