부모글 보이기/감추기 AD BLOCK 해제 요청 이 글에는 광고가 많이 들어가 있지 않습니다. adblock을 해제하셔도 글을 읽는데 그다지 부담이 없으니 해제를 부탁드립니다. (연관된 글이 1개 있습니다.) (시리즈 글이 12개 있습니다.) .NET Framework: 698. C# 컴파일러 대신 직접 구현하는 비동기(async/await) 코드 ; https://www.sysnet.pe.kr/2/0/11351 .NET Framework: 716. async 메서드의 void 반환 타입 사용에 대하여 ; https://www.sysnet.pe.kr/2/0/11414 .NET Framework: 717. Task를 포함하지 않는 async 메서드의 동작 방식 ; https://www.sysnet.pe.kr/2/0/11415 .NET Framework: 719. Task를 포함하는 async 메서드의 동작 방식 ; https://www.sysnet.pe.kr/2/0/11417 .NET Framework: 731. C# - await을 Task 타입이 아닌 사용자 정의 타입에 적용하는 방법 ; https://www.sysnet.pe.kr/2/0/11456 .NET Framework: 737. C# - async를 Task 타입이 아닌 사용자 정의 타입에 적용하는 방법 ; https://www.sysnet.pe.kr/2/0/11484 .NET Framework: 813. C# async 메서드에서 out/ref/in 유형의 인자를 사용하지 못하는 이유 ; https://www.sysnet.pe.kr/2/0/11850 닷넷: 2138. C# - async 메서드 호출 원칙 ; https://www.sysnet.pe.kr/2/0/13405 닷넷: 2147. C# - 비동기 메서드의 async 예약어 유무에 따른 차이 ; https://www.sysnet.pe.kr/2/0/13421 닷넷: 2318. C# - (async Task가 아닌) async void 사용 시의 부작용 ; https://www.sysnet.pe.kr/2/0/13884 닷넷: 2319. ASP.NET Core Web API / Razor 페이지에서 발생할 수 있는 async void 메서드의 부작용 ; https://www.sysnet.pe.kr/2/0/13885 닷넷: 2321. Blazor에서 발생할 수 있는 async void 메서드의 부작용 ; https://www.sysnet.pe.kr/2/0/13888 C# async 메서드에서 out/ref/in 유형의 인자를 사용하지 못하는 이유 다음과 같은 질문이 있군요. ^^ c# 의 async 에서 메서드 인자제한에 의문점이... ; https://throwbug.com/524/c%23-%EC%9D%98-async-%EC%97%90%EC%84%9C-%EB%A9%94%EC%84%9C%EB%93%9C-%EC%9D%B8%EC%9E%90%EC%A0%9C%ED%95%9C%EC%97%90-%EC%9D%98%EB%AC%B8%EC%A0%90%EC%9D%B4?show=525#a525 그동안 제 글을 ^^ 잘 읽어보신 분이 있다면 아마 저 해답을 알 수 있을 것입니다. 어떻게 설명이 이어지는지 한번 찾아볼까요? ^^ 이것을 이해하기 위해서는 우선 async 메서드를 C#이 풀이하는 방법을 알아야 합니다. 이에 대해서는 다음의 글에 적어두었습니다. C# 컴파일러 대신 직접 구현하는 비동기(async/await) 코드 ; https://www.sysnet.pe.kr/2/0/11351 따라서 C# async 메서드에 지정한 out 또는 ref (또는 C# 7.2의 in) 인자는 IAsyncStateMachine 인터페이스를 상속받는 상태 머신 클래스에 필드로 정의되어야 합니다. 문제는, out/ref/in 유형의 필드는 다음과 같이 ref 예약어가 붙는 식이어야 한다는 점입니다. private async Task<string> GetFileContents(out int length) { return await new TaskFactory().StartNew(() => { return "test"; }); } class CallAsync_StateMachine : IAsyncStateMachine { ref int _length; // out으로 반환될 인자 값 string _text; // 반환 값 //...[생략]... } 여기서 다시 문제는, 저런 닷넷의 관리 포인터가 클래스의 필드로는 정의될 수 없다는 것이고 이것을 다음의 글에서 설명했습니다. 닷넷의 관리 포인터(Managed Pointer)와 System.TypedReference ; https://www.sysnet.pe.kr/2/0/11529 결국, 1차적으로는 async 메서드에 out/ref/in을 지원하지 못하는 것은 C# 컴파일러의 문제지만 사실 "닷넷의 관리 포인터(Managed Pointer)와 System.TypedReference" 글에도 썼듯이 이것은 .NET CLR에 현재 구현된 GC의 제약 때문에 발생한 것입니다. Fields and array elements are not permitted to have & types. & cannot be boxed either. These restrictions are a bit artificial. It just makes the job of GC easier if & themselves are never on the heap. [이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.] [다음 글] Linux: 8. C# - 리눅스 환경에서 DllImport 대신 라이브러리 동적 로드 처리[이전 글] .NET Framework: 812. pscp.exe 기능을 C#으로 제어하는 방법 [연관 글] .NET Framework: 1000. C# - CS8344 컴파일 에러: ref struct 타입의 사용 제한 메서드 [최초 등록일: 3/18/2019] [최종 수정일: 3/18/2019] 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다. by SeongTae Jeong, mailto:techsharer at outlook.com 비밀번호 댓글 작성자 ... 46 47 48 49 [50] 51 52 53 54 55 56 57 58 59 60 ... NoWriterDateCnt.TitleFile(s) 12690정성태6/28/202116685Java: 23. Azure - 자바(Java)로 만드는 Web App Service - Tomcat 호스팅12689정성태6/25/202118372오류 유형: 730. Windows Forms 디자이너 - The class Form1 can be designed, but is not the first class in the file. [1]12688정성태6/24/202117700.NET Framework: 1073. C# - JSON 역/직렬화 시 리플렉션 손실을 없애는 JsonSrcGen [2]112687정성태6/22/202115026오류 유형: 729. Invalid data: Invalid artifact, java se app service only supports .jar artifact12686정성태6/21/202116993Java: 22. Azure - 자바(Java)로 만드는 Web App Service - Java SE (Embedded Web Server) 호스팅12685정성태6/21/202118207Java: 21. Azure Web App Service에 배포된 Java 프로세스의 메모리 및 힙(Heap) 덤프 뜨는 방법12684정성태6/19/202116557오류 유형: 728. Visual Studio 2022부터 DTE.get_Properties 속성 접근 시 System.MissingMethodException 예외 발생12683정성태6/18/202117871VS.NET IDE: 166. Visual Studio 2022 - Windows Forms 프로젝트의 x86 DLL 컨트롤이 Designer에서 오류가 발생하는 문제 [1]112682정성태6/18/202114417VS.NET IDE: 165. Visual Studio 2022를 위한 Extension 마이그레이션12681정성태6/18/202114708오류 유형: 727. .NET 2.0 ~ 3.5 + x64 환경에서 System.EnterpriseServices 참조 시 CS8012 경고12680정성태6/18/202116774오류 유형: 726. python2.7.exe 실행 시 0xc000007b 오류12679정성태6/18/202116895COM 개체 관련: 23. CoInitializeSecurity의 전역 설정을 재정의하는 CoSetProxyBlanket 함수 사용법112678정성태6/17/202115397.NET Framework: 1072. C# - CoCreateInstance 관련 Inteop 오류 정리112677정성태6/17/202118200VC++: 144. 역공학을 통한 lxssmanager.dll의 ILxssSession 사용법 분석112676정성태6/16/202117361VC++: 143. ionescu007/lxss github repo에 공개된 lxssmanager.dll의 CLSID_LxssUserSession/IID_ILxssSession 사용법112675정성태6/16/202115257Java: 20. maven package 명령어 결과물로 (war가 아닌) jar 생성 방법12674정성태6/15/202116484VC++: 142. DEFINE_GUID 사용법12673정성태6/15/202117116Java: 19. IntelliJ - 자바(Java)로 만드는 Web App을 Tomcat에서 실행하는 방법12672정성태6/15/202118722오류 유형: 725. IntelliJ에서 Java webapp 실행 시 "Address localhost:1099 is already in use" 오류12671정성태6/15/202127414오류 유형: 724. Tomcat 실행 시 Failed to initialize connector [Connector[HTTP/1.1-8080]] 오류12670정성태6/13/202117392.NET Framework: 1071. DLL Surrogate를 이용한 Out-of-process COM 개체에서의 CoInitializeSecurity 문제112669정성태6/11/202117564.NET Framework: 1070. 사용자 정의 GetHashCode 메서드 구현은 C# 9.0의 record 또는 리팩터링에 맡기세요.12668정성태6/11/202120056.NET Framework: 1069. C# - DLL Surrogate를 이용한 Out-of-process COM 개체 제작212667정성태6/10/202117897.NET Framework: 1068. COM+ 서버 응용 프로그램을 이용해 CoInitializeSecurity 제약 해결112666정성태6/10/202115518.NET Framework: 1067. 별도 DLL에 포함된 타입을 STAThread Main 메서드에서 사용하는 경우 CoInitializeSecurity 자동 호출112665정성태6/9/202117571.NET Framework: 1066. Wslhub.Sdk 사용으로 알아보는 CoInitializeSecurity 사용 제약1 ... 46 47 48 49 [50] 51 52 53 54 55 56 57 58 59 60 ...