p654 의 비동기 처리 확인을 위해 스레드 ID를 출력하는 내용이 있는데요,
byte[] buf = new byte[fs.Length];
Console.WriteLine("Before ReadAsync: " + Thread.CurrentThread.ManagedThreadId);
await fs.ReadAsync(buf, 0, buf.Length);
Console.WriteLine("Before ReadAsync: " + Thread.CurrentThread.ManagedThreadId);
string txt = Encoding.UTF8.GetString(buf);
Console.WritLine(txt);
이 코드 설명을 await 호출 전과 후의 스레드 ID가 다르다라고 하셨는데, 좀 이상해서 직접 실행해봤더니, 같게 나오더라고요. fs.ReadAsync 만 다른 스레드에서 호출되고, 이후의 실행은 fs.ReadAsync 가 처리되고, 원래 호출 스레드(여기서는 메인 스레드)에서 실행되어야 하지 않을까요? 그렇지 않으면, await 호출 이후의 아래 쪽 내용들에서 접근하는 메인 스레드의 모든 데이터에 대해 락을 걸어야 할텐데요.
[최초 등록일: ]
[최종 수정일: 1/10/2014]