Microsoft MVP성태의 닷넷 이야기
Task, TaskAwaiter 질문 있습니다. [링크 복사], [링크+제목 복사]
조회: 4435
글쓴 사람
한예지 donator
홈페이지
첨부 파일
 

선생님 안녕하세요.

4월까지 자바하다가 5월부터 C#을 사용하는데 비동기 패턴이 생각보다 어렵네요...

아래 질문 답변해주시면 정말 감사드립니다.
  
① Task.Run()이 Task를 리턴하는 것은 책임 연쇄 패턴이라고 볼 수 있나요?

② 만약 책임 연쇄패턴이 맞다면 Task의 continuation를 위해서 그렇게 설계했다고 보면 될까요?

③ Task 클래스는 TaskAwaiter 구조체의 Wrapper 클래스인가요?

④ TaskAwaiter 구조체를 Task 클래스로 Wrapped한 것은 캡슐화로 볼 수 있나요?

⑤ 만약 캡슐화가 맞다면 작업 결과, 예외 처리, 기타 정보 등을 포함시키기 위한 목적인가요?

⑥ 메서드가 Task 혹은 Task<TResult>를 반환한다는 것은

    작업 결과나 혹은 예외가 포함된 Task 객체를 스레드 풀의 request queue에 큐잉한다는 뜻으로 해석해도 될까요?
⑦ request queue에서 작업을 가져오고 작업이 완료되면 다시 request queue에 다시 집어넣는다고 생각해도 될까요?

⑧ consuming code가 혹시 무엇인지 알 수 있을까요? 검색해도 명확한 뜻이 나오지 않았습니다....

⑩ awaitable object는 Task 혹은 Task<TResult>를 반환하는 놈이라고 봐도 될까요?








[최초 등록일: ]
[최종 수정일: 5/9/2022]


비밀번호

댓글 작성자
 



2022-05-09 11시34분
1. 그보다는 단순히 helper 메서드라고 보는 것이 좋겠습니다. 혹은, 굳이 갖다 붙이자면 Factory 패턴이 가까울 듯합니다.

2. (생략)

3. Wrapper는 아닙니다. 그보다는 TaskAwaiter와 Task는 서로 의존적인 구조인데... 딱히 어떻게 이름지어야 할지 모르겠군요. 어쨌든, Task는 TaskAwaiter를 내부에 필드로 래핑하지 않으며, 오히려 TaskAwatier가 Task를 내부 필드로 담고 있습니다.

4. (생략)

5. (생략)

6. 엄밀히, Task/Task<TResult>를 반환하는 것은 그 이상/그 이하의 의미도 없습니다. 순수하게 Task를 반환하는 일반 메서드로 보면 됩니다. 그리고... 그다음 문장이 어떤 의미에서 질문한 것인지는 알 수 없으나 "결과...를 가진 Task 개체"를 별도로 보관하는 Queue같은 것은 없습니다.

7. (생략)

8. 어떤 문맥에서 사용된 단어인가요? 아마도 cpu-intensive 작업을 일컫는 또다른 용어 같은데, I/O 작업 없이 순수하게 CPU 자원만을 소비하는 코드를 의미할 것입니다.

9. 일반적으로는 그렇습니다. 엄밀히는 일정한 규칙을 만족하기만 하면 되는데, 이에 대해서는 다음의 글에 소개한 MyTask 타입을 참고하세요. (아래의 글은 아마도 3번 질문에 대한 답도 될 것입니다.)

C# - await을 Task 타입이 아닌 사용자 정의 타입에 적용하는 방법
; https://www.sysnet.pe.kr/2/0/11456#awaitable
정성태
2022-05-10 04시38분
[한예지] you`ll see two examples of consuming code:
one that doesn`t handle null references
and another that shows how to protect against null references.
[출저] C# Cookbook(Joe Mayo) 79쪽

Because the database connection isn`t actually
made until the data is bound,
it`s all too easy for the consuming code in the web page
to use the data without protecting itself against possible errors.
[출저] Pro ASP.NET 3.5 in C# 2008(Matthew MacDonald) 554쪽

선생님 혹시 위의 예문들에서도
consuming code를 I/O 작업 없이 순수하게 CPU 자원만을 소비하는 코드라고 받아들이면 될까요?
[guest]
2022-05-10 07시10분
아마도 위의 글에서는 "consuming code"가 "해당 코드를 사용하는 것"을 의미하는 것 같습니다. 가령, 첫 번째 글에서는 "해당 코드를 사용하는 2개의 예제..."라고 번역하면 될 듯합니다.
정성태

1  2  3  4  5  6  7  8  9  [10]  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5699갓경섭7/29/20224438C# 프로그램 느려짐 현상 [2]
5698kss7/29/20225203ValueTask 질문입니다. [5]
5697스팸7/28/20225188윈도우서버 Port 고갈문제 (Event ID 4227, 4231) [3]파일 다운로드1
5696유석7/27/20225470닷넷 4.X 와 닷넷 6.0 버전 차이 [6]
5695초보코더7/26/20224828[WCF] EndpointNotFoundException 기본 연결이 닫혔습니다. 원격 서버에 연결할 수 없습니다. [1]
5693차가워7/22/20224306socket 종료 시 reveive수신부에서 에러 나는거 처리 문의 [5]
5692도비7/21/20223917Ubuntu LVM 확장 관련 [1]파일 다운로드1
5691따봉이7/21/20224611Task 비동기 UI 크로스 쓰레딩 Err 관련 [1]
5690훈이7/20/20223851wpf질문입니다 [2]
5689질문7/20/20223644비동기 함수를 사용하는 방법에 대한 질문입니다 [1]
5688김정현7/11/20223735소스 디버깅(F5)시 프로그램 켜지지 않고 디버깅 가능한 상태 [1]
5687규철7/6/20223851개발업무 문서 관리 방법 문의 [3]
5686권용완7/5/20223820Linq Entites 에서 string[]에 담긴 데이터를 제외하는 방법 문의 [3]
5685차가워7/4/20223989메모리 선택 문의 [1]
5683김민혁7/1/20224540HttpWebRequest POST 전송 관련해서 질문 드립니다. [4]파일 다운로드1
5682김기헌6/20/20223984안녕하세요 서로 다른 스레드에서 동일 인스턴스의 메소드를 호출할때 질문드립니다 [2]
5681미래는투...6/19/20223868VC++ 빌드 관련 문의 (h파일이 바뀌었는데 컴파일을 꼭 하지 않아도 되나요?) [1]
5680Syong6/12/20224872EXE파일에 속성값 추가하는 방법이 있나요? [2]파일 다운로드1
5679차가워6/8/20224005tcpip socket 여러 랜카드 사용 시 연결 문의 [1]
5678차가워6/7/20223917원자적 실행 문의 [3]
5677장성욱6/7/20223939블루투스 포트와 시리얼포트 연결시 에러 [2]
5675차가워5/29/20224621윈도우설정 프로세스사용계획 옵션과 c# 스레드 [1]
5674민우5/29/20224490C++ 의 RTTI, Reflection 으로 객체 멤버변수, 멤버함수 목록 추출 문의 [2]
5673조은현5/25/20225424안녕하세요 선생님! c#에서 TCP/IP의 keep alive 기능의 사용법에 대해서 질문드리고 싶어요! [2]파일 다운로드2
5672game...5/23/20225321안녕하세요 GC를 일시적으로 중단시키는 방법이 있을까요? [5]
5671한예지 donator5/20/20224923델리게이트와 함수포인터 선언 시, 차이점 질문 있습니다. [3]
1  2  3  4  5  6  7  8  9  [10]  11  12  13  14  15  ...