6월, 2021의 게시물 표시

NamedPipeServerStream.WaitForConnectionAsync(CancellationToken) 메서드가 토큰이 취소됐음에도 무기한 대기할 때 해결 방법

NamedPipeServerStream NamedPipeServerStream C#에서는 Named Pipe를 손쉽게 사용하기 위한 클래스인 NamedPipeServerStream , NamedPipeClientStream 을 지원합니다. 이 중 NamedPipeServerStream 은 그 이름에서 알 수 있듯 서버 기능 구현을 위한 스트림입니다. 연결 대기 서버는 당연히 클라이언트가 있어야 의미가 있습니다. 서버 혼자서는 아무것도 할 게 없기 때문이죠. 이런 당연한 얘기는 제쳐두고, 서버를 구현하다 보면 자연스레 클라이언트가 연결이 됐는지 안 됐는지 확인하는 코드가 필요하게 됩니다. TCP 소켓 같은 경우에는, AcceptAsync 등을 사용해 아예 클라이언트 소켓 자체를 받아오거나, Pending 메서드를 사용해 접속 대기중인 클라이언트가 있는지 확인할 수 있습니다. 그럼 NamedPipeServerStream 에는 뭐가 있을까요? WaitForConnection, WaitForConnectionAsync 당연히 NamedPipeServerStream 에도 클라이언트 접속 여부를 판단하는 메서드가 있습니다. 바로 WaitForConnection , WaitForConnectionAsync 입니다. 첫 번째 메서드는 동기 방식으로 대기합니다. 이 경우에는 해당 메서드가 호출된 시점부터 클라이언트가 접속할 때까지 호출된 스레드가 블럭 됩니다. 이번 포스트에서 다룰 것은 두 번째 메서드, WaitForConnectionAsync 입니다. CancellationToken WaitForConnectionAsync 메서드는 인자로 CancellationToken 을 받을 수 있습니다. 따라서, 해당 토큰에 취소 요청이 받아들여지면 대기를 중지하고

Array.concat을 사용하면 두 배열을 이어붙일 수 있습니다.

Array.push Array.push 자바스크립트에 Array가 있습니다. 주로 다음과 같이 초기화하죠. let arr = []; let otherArr = new Array (); let anotherArr = new Array ( 5 ); let filled = anotherArr.fill( 0 ); // ... 코딩을 하다 보면, 이렇게 초기화된 배열에 다른 요소를 집어넣어야 하는 경우가 생깁니다. 그럴 때 주로 사용하는 것이 Array.push 메서드입니다. let arr = [ "Apple" , "Banana" , "PineApple" ]; console .log(arr); // => [ 'Apple', 'Banana', 'PineApple' ] arr.push( "Orange" ); console .log(arr); // => [ 'Apple', 'Banana', 'PineApple', 'Orange' ] 특정 위치에 요소를 삽입하거나 제거할 때엔 splice를 사용하기도 합니다. arr.splice( 1 , 0 , 'Melon' ); console .log(arr); // => [ 'Apple', 'Melon', 'Banana', 'PineApple', 'Orange' ] arr.splice( 3 , 1 ) // => [ 'PineApple' ] console .log(arr); // =&g

Typescript Enum의 Key 반환받기, 모든 키/값 리스트 반환받기

Typescript의 enum 키워드 Typescript의 enum 키워드 여타 다른 언어와 같이, 타입스크립트의 enum 키워드 역시 열거형을 나타내기 위해 사용됩니다. 그리고 마찬가지로, 다른 언어와 같이 멤버의 값은 정수형으로 변환되게 됩니다. 예를 들어 다음과 같은 코드가 있을 때, enum TestEnum { A, B, C, D, E, } 각각의 값은 다음과 같이 나타납니다. > TestEnum.A 0 > TestEnum.B 1 > TestEnum.C 2 > TestEnum.D 3 > TestEnum.E 4 즉, 열거형의 첫 번째 멤버부터 0으로 시작해 순차적으로 증가하는 방식입니다. 물론, 값을 지정할 수도 있습니다. 다음과 같이요. enum TestEnum { A = 3 , B, C, D, E, } 혹은, 플래그 형식으로 사용하기 위해 다음과 같이 지정할 수도 있습니다. enum FlagEnum { NOTHING = 0 , FRIENDLY = 1 << 0 , HOSTILE = 1 << 1 , NEUTRAL = 1 << 2 , SPECIAL = 1 << 3 , ALL = ~(~ 0 << 4 ), } 열거형 필드는 number를 반환. 그렇다면 열거형의 이름을 반환하려면? 좋습니다. 열거형의 필드를 참조하면 열거형의 값, 즉 number 값이 반환되는 것은 알겠습니다. 하지만 열거형의 이름, 즉 A, B, C, D, E 각각을 반환받기 위해서는 어떻게 해야할까요? 공식 문서의 Reverse Mapping 항목을 보