Microsoft MVP성태의 닷넷 이야기
ValueTask 질문입니다. [링크 복사], [링크+제목 복사],
조회: 13878
글쓴 사람
kss
홈페이지
첨부 파일
 


async 메소드 내에서 if 문을 통해 await 없이 return할경우
ValueTask를 통해 최적화 하는것이 좋다알고있습니다.

이럴 바엔 그냥 모든 Task 반환값을 ValueTask로 바꿔도 되지않을까요?
매번 Task로 반활할지 ValueTask로 반활할지 판단하기 번거롭습니다.

단점이 있을까요?








[최초 등록일: ]
[최종 수정일: 7/29/2022]


비밀번호

댓글 작성자
 



2022-07-29 01시44분
ValueTask는 이름에서 의미하는 바와 같이 "값 형식"입니다. 반면 일반적인 비동기 과정을 거치기 위해 반환하는 Task의 경우 GC Heap을 사용하는 참조 형식인데요, 굳이 비동기 과정을 거치지 않는다면 GC Heap을 어지럽힐 이유가 없으므로 그런 경우를 위해 ValueTask를 반환하는 것입니다.

최적화에 해당하는 작업이니 번거로운 것은 감수해야 합니다. 참고로, 아래의 문서에서 "There are tradeoffs to using ..." 절과 바로 그다음에 나오는 "For uses other than ..." 절을 꼭 읽어보실 것을 권장합니다.

ValueTask<TResult> Struct
; https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.valuetask-1

즉, ValueTask를 쓰는 것이 언제나 최선은 아니라는 점 기억하시고, 개인적으로는, 일반적으로 Task를 쓰고, 단지 해당 비동기 메서드가 for 문 등에서 자주 호출되는 경우에 한해 ValueTask를 고민하라는 말을 하고 싶습니다.
정성태
2022-07-29 04시21분
[kss] ValueTask가 Task보다 성능이 좋으니깐
개발자가 Task랑 ValueTask랑 고민할시간에
그냥 모든 async함수를 다 ValueTask로 반환하면 안될까요?
[guest]
2022-07-29 04시25분
[kss] 개인적으로 ValueTask 나왔으니 Task는 deprecate 해도 되지않나 생각도듭니다.
[guest]
2022-07-29 04시52분
답변을 이해하지 못하셨군요. ValueTask는 값 형식으로 stack에만 존재할 수 있기 때문에 정상적인 비동기 호출을 수행할 수 없습니다.

kss 님의 질문은, C#에서 모든 타입을 struct로 만들면 될 것을, 왜 class로 만드는 것을 제공하느냐를 묻는 것과 같습니다.
정성태
2022-08-02 09시47분
아래의 글을 참고하세요.

C# - Task와 비교해 본 ValueTask 사용법
; https://www.sysnet.pe.kr/2/0/13114

C# - ValueTask와 Task의 성능 비교
; https://www.sysnet.pe.kr/2/0/13115
정성태

... 61  62  63  64  65  66  67  [68]  69  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
891임동찬7/6/201018249        답변글 [추가]: [답변]: 아래 887번에 대한 추가 질문
892정성태7/6/201015372            답변글 [답변]: [추가]: [답변]: 아래 887번에 대한 추가 질문
888김재영7/5/201015219TFS에 반드시! SQL Report랑 SharePoint(or WSS)가 붙어야 합니까? [2]
887임동찬7/2/201016507WCF sendTimeout에 관하여... [1]
886김재영6/16/201016548스레드 선언시 (Parameterized/)ThreadStart에 정의되는 메소드의 위치에 질문이 있습니다. [3]
885장근배6/13/201024053Win32Exception 창 핸들 에러 [1]
883채동민6/10/201016305비동기 DB 쿼리관련 질문
884정성태6/10/201017642    답변글 [답변]: 비동기 DB 쿼리관련 질문
881최준영5/24/201017454load되지않은 아이템 load하는 방법? [1]
880임상일5/10/201019703VS2010 TestManager를 통한 UI Test 관련 질문입니다. [2]파일 다운로드1
879정용훈5/3/201020934wcf 인증 문제 [2]
878채동민4/20/201020018WCF에서 maxItemsInObjectGraph 오류 관련 질문드립니다. [2]
872날쌘돌이4/8/201022614Windows7 에서 IIS에서 폼인증 으로 디버깅.. [1]파일 다운로드1
871영초4/7/201017981실버라이트로 스캐너 구동 프로그램이 가능할까요? [1]
869김재영4/6/201016965이미 실행된 어셈블리 컨트롤 권한을 다른 어셈블리에서 가져올 수 있습니까? [2]
868Lime3/5/201020540WCF 에서의 DataTable 사용 [2]
867Dani...2/18/201020733Question - HTTP 401.3 on DELETE, PUT verbs [6]파일 다운로드1
865박근대2/16/201017192WCF 오류 문의. [1]
863날쌘돌이1/31/201019492ActiveX Cab에서 닷넷 dll 등록 [1]
862장근배1/28/201017331AppPolId를 알 수 있는 방법이 있는지요? [1]
864장근배2/1/201016985    답변글 [답변]: AppPolId를 알 수 있는 방법이 있는지요?
858생초보1/26/201017349안녕하세요.. 파일 생성 처리 문제로 .... [2]
857꼭지1/22/201023300How to support Basic + Windows authentication mode in WCF(RESTful service) [4]파일 다운로드2
856질의자1/13/201021045vcredist_x86 배포 관련 여쭙습니다. [1]
855임동찬1/13/201019393이벤트 핸들러와 쓰레드의 관계 2 [4]파일 다운로드2
854임동찬1/12/201019586이벤트 핸들러와 쓰레드의 관계 [1]
... 61  62  63  64  65  66  67  [68]  69  70  71  72  73  74  75  ...