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
정성태

... 16  17  18  19  20  21  22  23  24  25  [26]  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
5257C#초보11/9/20197445파일 저장 방법에 대해 조언 부탁드립니다. [3]
5256세퉁11/8/20196764안녕하세요~ 질문은 아닙니다만.. [1]
5255C#초보11/6/20197322중첩 딕셔너리를 어떻게 만들 수 있을까요? [2]
5252김동수11/4/20196939Windows 10 로그인 ( Credential Provider ) 문의드립니다. [1]
5251kss11/1/20197016c#문법질문입니다. [1]
5250이대희10/31/20197122시작하세요 C# 7.3 프로그래밍 책이 절판이네요. [1]
5249황태관10/24/20197602c# 폼안에 특정 프로그램 불러오기.. [1]파일 다운로드1
5248황태관10/23/20198447C언어로 만든 dll 를 참조해서 c#으로 만들려면.. [3]
5245민성10/21/20197537안녕하세요 Ui 스레드 접근에 대해서 질문드리도록 하겠습니다. [1]
5244hbli...10/20/20196978두개의 쓰레드에서 하나의 Queue 리스트 사용시 질문드립니다. [2]
5243최선호 donator10/18/20196567Screen Capture 와.. Overlay 질문 좀 드릴게요 ㅠ.ㅠ ( 장문 주의..... ) [2]
5241C#초보10/16/20198583C# USB 통신 구현 관련 질문 드립니다! [1]
5240김동규10/15/20198513런타임 시 Encoding.Default를 UTF-8로 설정할 수 있을까요? [3]
5239밤톨이10/13/20196760시놀리지 DSM에 asp.net core 2 웹서버 구축이 가능한가요? [1]
5238권석헌10/2/20197306C# - C++ 간의 Memorymapped file 관련 Data 질문좀 드립니다 선생님 [1]
5237유호성10/1/20197102사용자 정의 컨트롤 VS IDE에서만 Exception 발생 [2]
5234koko9/25/20199348안녕하세요. 64bit WPF -> 32bit C++ DLL Import사용 문의 드립니다. [3]
5232fox3...9/24/20197155C# Memorymappedfile 재 업로드 드립니다.(실행순서 및 질문내용 정리) [7]파일 다운로드1
5231fox3...9/24/20197543C# 메모리맵드파일 관련 질문드립니다. 최소한의 재현가능코드 첨부후 재질문 드립니다. [2]파일 다운로드1
5230질문9/23/20197212C++ 로 만든 dll 을 C#에서 사용할 때 질문 [2]
5229fox3...9/23/20199607C# 메모리맵드파일 관련 질문드립니다. [2]
5227세퉁9/23/20198277WPF Textblock 폰트 크기에 따라 글자 색이 깨지는 현상이 있습니다. [3]파일 다운로드1
5226김대훈9/23/20197932정말 황당한 경우입니다.. [2]
5223김태균9/19/20197653책 소개 링크가 7.1버전판으로 이어집니다. [1]
5222냥냥이9/14/20198196프로그래밍 논리력이 많이 부족합니다 [3]
5219티지레몬9/9/20199682c# PCB 자동화 프로그램(윈도우 폼 위주로 작업) 제작 준비 [3]
... 16  17  18  19  20  21  22  23  24  25  [26]  27  28  29  30  ...