c#12 semaphore.. //semaphore... //increase, decrease.. //initial count -> 초기에 .. 동시성으로 할 수 있는 수.. var semaphore = new SemaphoreSlim(2, 10); for (int i = 0; i { Console.WriteLine($"Entering task {Task.CurrentId}"); semaphore.Wait(); // release count...- > wait on semaphore일때 block이 된다.. Console.WriteLine($"Processing task {Task.CurrentId}"); }); } while (semaphore.CurrentC.. 2022. 12. 6. c# 7.0...8.0 in.. 메서드의 매개변수에 in변경자 추가 -> in은 ref + readonly이다.. 값 복사 부하를 줄이기 위해서 ref로 변경한다면 오동할 수 있는 프로그램이 만들어 질 수 있다 -> 값 호출자쪽에서는 값변경을 원하지 않을 수도 있기때문이다 이를 위해서 ref + readonly인 in을 추가.. Vector v1 = new(); StructParam(in v1); // 불필요한 값 복사 없다. void StructParam(in Vector v) { // v.x = 5; in으로 인해서 변경 불가 } struct Vector { public int x { get; set; } public int y { get; set; } }readonly 구조체 일반적으로 readonly는 값을 직접 변경하.. 2022. 12. 6. c# 패턴매칭... switch case에 활용.. 예1. List objList = new(); foreach (object item in objList) { switch (item) { case 100: break; case null: break; case DateTime dt: // 타입패턴, 필요없다면 dt 변수명을 _로 생략 가능d break; case ArrayList arr: break; case var elem: break; } } case쪽을 보면서.. var패턴, 타입패턴, 상수 패턴이 있다... switch case에 패턴들을 적용하면서 모든 if문은 switch case문으로 또한 그 반대도 가능하게되었다 예2. //변경 전... int j = GetIntegerResult(); if (j > 300) { } else { } //변경.. 2022. 12. 6. Generic, where, using static Generic... where.. c#의 generic을 사용할 때 제약없이 받아보는 경우를 먼저보자 T AllocateIfNull(T item) { if (item == null) { item = new(); } return item; } 이렇게 된 경우에는 T에 무조건 기본생성자가 있을거라는 확신이 차있는 경우다 그렇지만 기본생성자가 없는 경우라면 에러가 발생할 수 있다 항샹을 시킨다면 .. T AllocateIfNull(T item) where T : class, new() { if (item == null) { item = new(); } return item; } where을 이용해서 T조건을 걸어준다, class이면서 new() 기본생성자를 가지고있는 것이다. cf: Nullable는 -> ?.. 2022. 12. 6. 이전 1 2 3 다음