본문 바로가기

C#5

비동기 vs 동기 개요 동기 비동기 동시성 여러 종류 음식을 하나씩 조리함. 여러 종류 음식을 동시에 조리함. 일치화 손님이 올때까지 기다리다 같이 먹음. 손님을 기다리지 않고 먹음. 동기 방식 각 함수의 실행과 완료 시점이 일치한다. 한 시점에 모든 작업이 동시에 이뤄진다. 비동기 방식: 싱글 스레딩(코루틴) using System.Collections; public class Program { public static IEnumerator A() { Console.WriteLine($"{((Thread.CurrentThread.ManagedThreadId == 1) ? "Main" : "Worker")}: Start A"); yield return null; Console.WriteLine($"{((Thread.Cur.. 2021. 9. 8.
async/await 비동기 작업 async/await 비동기 작업 async/await 키워드는 멀티 스레드로 비동기 작업을 수행한다. 우선 yield return을 간단하게 살펴보자. yield return using System; using System.Collections; using System.Threading; public class Program { public static void Main() { var enumerator = DoTaskAsync(); enumerator.MoveNext(); // [Main ] Thread ID: 1 Console.WriteLine($"[Main ] Thread ID: {Thread.CurrentThread.ManagedThreadId}"); if ((int)enumerator.Curr.. 2021. 8. 4.
P/Invoke Marshal: C#에서 C++(native code) 사용하기 Native Code 란? Native Code는 다른 말로 Unmanaged Language이며, C와 C++가 대표적이다. Native Code는 컴파일 시 어셈블리어(≒기계어)로 바로 번역된다. 이에 반해 Managed Language는 중간언어(IL)로 우선 컴파일된다. C#과 JAVA가 대표적이다. 중간언어는 런타임 시 JIT컴파일에 의해 기계어로 번역된다. 📖 레퍼런스 Managed Code vs Native Code의 차이 StackOverFlow: what is native code ? P/Invoke Marshal ? 보통 어플리케이션은 생산성이 높은 Managed Language로 작성되는데, 특정 영역의 API는 Native Code외 사용할 수 없기 때문에 Native Code를 라.. 2021. 8. 2.
BinaryWriter/Reader 이해하기: Write, Read, vs StreamWriter Write, Read BinaryWriter와 BinaryReader는 스트림 버퍼를 쓰거나 읽는 클래스다. FileStream을 Write/Read 해보자. using System; using System.IO; namespace StreamStudy { class Program { static void Main(string[] args) { DirectoryInfo[] cDirs = new DirectoryInfo(@"c:\").GetDirectories(); if (File.Exists("CDriveDirs.txt")) { File.Delete("CDriveDirs.txt"); } // Write using FileStream fw = new FileStream("CDriveDirs.txt", Fi.. 2021. 7. 12.
StreamWriter/Reader 이해하기: WriteLine, Flush StreamWriter System.IO.StreamWriter는 문자열 데이터를 스트림에 저장하는 데 쓰인다. BinaryWriter와 다르게 파일 경로를 통해 바로 FileStream을 OpenOrCreate한다. ⭐ Stream 스트림은 단순하게 말하면 Binary Buffer이다. 이진데이터는 주로 통신 및 I/O 로직에 사용된다. e.g. System.IO.MemoryStream, System.IO.FileStream, System.Net.Sockets.NetworkStream 등 StreamWriter의 BaseStream이 된다. 스트림 종류 더보기 WriteLine, Flush WriteLine()은 StreamWriter._charBuffer에 문자열을 저장하는 함수고, Flush()는 .. 2021. 7. 9.