Microsoft MVP성태의 닷넷 이야기
글쓴 사람
궁금맨
홈페이지
첨부 파일
 

정성태님 C# 10 책에 681쪽 맨 밑에 예제를 보면 스레드 ID를 출력하잖아요.


예제)

 Console.WriteLine("Before ReadAsync: " + Environment.CurrentManagedThreadId);

 await fs.ReadAsync(buf, 0, buf.Length);

 Console.WriteLine("After ReadAsync: " + Environment.CurrentManagedThreadId);

 당연히 성태님 말씀대로 스레드 ID가 무조건 다를 줄 알았는데 화면에

Before ReadAsync: 1
After ReadAsync: 1

 이렇게 계속 나와서

 이상해서
 여러 번 계속 반복 적으로 실행시켜야 그때 ID가 다르게 출력 되었습니다.

  await 키워드의 비동기 호출은 무조건 별도의 스레드 할당을 하는 게 아닌 건가요?
 컴퓨터의 상태에 따라 다른건지...
 궁금합니다.











[최초 등록일: ]
[최종 수정일: 1/28/2023]


비밀번호

댓글 작성자
 



2023-01-28 08시20분
질문해 주셔서 감사합니다. ^^

우선 예제를 바꿔야겠습니다. ^^; Windows의 ReadFile은 해당 파일을 빠르게 읽을 수 있는 상황이면 그냥 동기적으로 파일을 읽어 반환합니다. 그렇지 않은 경우에만 비동기로 실행을 합니다.

아무래도 해당 예제 코드로 지정한 HOSTS 파일의 크기가 (근래의 PC 성능으로는) 너무 작은 듯합니다. 일단 해당 파일명을 다음과 같이 바꿔주시면,

    "C:\windows\system32\drivers\etc\HOSTS"
    ==> "C:\windows\system32\drivers\etc\services"

정상적으로 동작할 것입니다.

--------------------------

그리고, 해당 예제는 "동기" 모드로 파일을 연 것을 "비동기"로 읽기 실행을 한 것입니다. 이 부분은 제가 실수한 것인데 정오표에 추가했으니 참고해 주세요.

도서: 시작하세요! C# 10 프로그래밍 - 정오표
; https://www.sysnet.pe.kr/2/0/13101#errata

이유는 자세하게 쓰진 못했지만 다음의 글을 통해 심도 있게 설명했으니 가볍게 읽어보시길 권장합니다.

C# - 닷넷에서의 진정한 비동기 호출을 가능케 하는 I/O 스레드 사용법
; https://www.sysnet.pe.kr/2/0/12250

C# - 파일의 비동기 처리 유무에 따른 스레드 상황
; https://www.sysnet.pe.kr/2/0/12251

---------------------------

참고로, await 이후의 코드가 비동기/동기로 실행되는 것은 100% 확정지을 수는 없습니다. 이에 대해서도 다음의 글을 통해 자세하게 설명했으니 역시 가볍게 읽어보시길 권장합니다.

C# - async/await 그리고 스레드 (1) MyTask로 재현
; https://www.sysnet.pe.kr/2/0/13055

C# - await 비동기 호출을 기대한 메서드가 동기로 호출되었을 때의 부작용
; https://www.sysnet.pe.kr/2/0/13138
정성태

... 61  62  [63]  64  65  66  67  68  69  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
1042이성환2/20/201212914BlockingMethod에 빠진 스레드를 즉시 죽이고 싶습니다...;ㅅ; [2]파일 다운로드1
1039김재영2/15/201212119어셈블리에 사용자마다 다른 값을 적용하여 자동 빌드 방법이 있을까요? [2]
1037윈드로니2/12/201213588WPF 관련 질문 드립니다. [2]
1035임동찬2/9/201211920XML, XSD, XMLCodeGenerator 관련 [2]
1033곽성현2/7/201212283훔..윈도우 디바이스 드라이버 관련 [1]
1030궁빈2/2/201214765msbuild를 이용한 웹게시 및 자동 Dist 방법론에 대해 질문 드립니다!! [6]
1028신정환1/30/201212095기존 legacy Windows application이 WoA 환경에서 동작되지 않는 이유가 무얼까요? [2]
1026노현철1/19/201213882WPF가 XP에서 느리게 로딩되는 현상에 대해 질문드립니다. [4]
1025궁그미1/18/201214776네이버 소켓 로그인 이해가 안되는점이 있는데요 [2]
1022선무당1/11/201212977TFS 에서 공통 Assembly 공유 방법에 대해서 해결책이 없을까요? [2]
1021김재영1/8/201212025대리자를 메소드 파라메터로 넘겨도 됩니까? [2]파일 다운로드1
1019남산골11/13/201914264안녕하세요!! 성태님~~ [3]
1018강한구12/29/201117504WPF ClickOnce 배포시 콤포넌트 dll 다운로드 문제에 대하여 질문 있습니다. [1]
1017임동찬12/28/201114704smart client와 xbop, silverlight [6]
1015개똥이12/22/201112381RMCLOCK 설정 관련 질문이요ㅜ [2]
1011사길수12/16/201112379hyper-v 이더넷 카드 관련 문의 좀 드립니다. [1]
1006루로니12/13/201114540윈도우7과 XP의 DLL후킹 처리에 관해서 질문입니다. [3]
1005남산골12/13/201114307안녕하세요!! 첫 인사드립니다. [3]
1004뽀로로12/12/201111582Managed 어셈블리에서의 COM EntryPoint procaddress 문제 [1]
1003나그네12/8/201113605닷넷에서 가상메모리(Commit) 의 크기를 줄이거나 해제하는 방법은 어떻게 해야할지요? [1]
1002나그네11/29/201113293안녕하세요 ^^ 문제가 생겨서 혹시나 여기서라면 답이 나오지 않을까 해서.. [1]
1001선무당11/29/201114217clickonce+ntd 시스템에서 proxy Server 가 개입되는 경우 cache 해결을 위한 방법... [1]
1000초보개발자11/28/201112785웹서비스용 웹 서버의 SSD 가치에 대해서... [1]
999날쌘돌이11/25/201111978ADFS와 WIF 질문 [1]
998윤용한11/9/201113163File Write 도중 정전 발생 시 대처 방법 있나요? [2]
997조장원11/7/201112660Silverlight 에서의 Auth 방법에 대한 고찰 [2]파일 다운로드1
... 61  62  [63]  64  65  66  67  68  69  70  71  72  73  74  75  ...