본문 바로가기

[C#] Async,Await의 내부 원본 https://github.com/pjc0247/behind_async_await behind_async_awaitC#은 stackless한 코루틴을 지원합니다. 어케 가능한지 아라보자static async void Foo() { Console.WriteLine("A"); await Task.Delay(1000); Console.WriteLine("B"); await Task.Delay(1000); Console.WriteLine("C"); }아래의 코드는 Foo 함수를 디컴파일 한 결과물을 기반으로 다시 작성되었습니다. 대충 필요한것만 남기고 생략함class MyAsync : System.Runtime.CompilerServices.IAsyncStateMachine { internal AsyncV.. 더보기
[C++] ToString() 사용하기 C++에는 없지만 다른 언어에는 존재하는 ToString 기능이 부러워서 만들어 보았습니다. 소스 코드와 사용법 : https://github.com/pjc0247/to.cpp 대략적인 사용법은 아래와 같습니다. std::vector v({1,2,3,4}); std::cout 더보기
[C#] async void / Task async void AsyncVoid() { /* .... */ throw new Exception(); } async Task AsyncTask() { /* .... */ throw new Exception(); } 공통점* 둘다 메소드 본문이 다 실행되기도 전에 리턴한다. 정확히는 첫번째 await 를 만나기 전까지는 계속 실행되고, 첫번째 await를 만나면 리턴한다. void 의 경우* 익셉션이 발생하면 UnhandledException으로 간주되고 프로그램이 종료된다. (.NET 런타임이 이 메소드가 익셉션을 내는지 안내는지를 감시한다) Task 의 경우* .NET 런타임이 감시하지 않는다. 유저가 예외처리를 해야 함* 발생한 익셉션은 리턴값 Task의 Exception에 채워진다 * 또는 aw.. 더보기