[C#] BufferBlock<T>를 이용한 테스크 깨어남 및 메시지 처리

사실 이 내용은

| C# - BufferBlock 사용 예제

https://www.sysnet.pe.kr/Default.aspx?mode=2&sub=0&pageno=0&detail=1&wid=12845

위의 내용을 통해 알게 됐습니다. 이것이 .NET Core 1.0부터 지원하고 있었다는 점이 놀랍군요. 제가 나름 .NET Core 이후로 언어의 발전은 잘 따라왔는데 기능은 따라오지 못한 것 같습니다.

전통적으로 이것은 ManualReset 또는 AutoReset을 통해 구현할 수 있습니다. 하지만 Task의 장점을 누리기가 힘든데요, BufferBlock을 사용하면 Task를 통해 스레스를 효율적으로 사용하면서 필요할 때 깨어나는 동작을 만들 수가 있습니다. 제네릭 인자 T를 통해 깨어났을 때 메시지를 처리할 수 있는 것은 덤이죠.

BufferBlock가 유용하게 쓰일 수 있는 경우가 많이 있습니다. 가령, 송신부와 수신부를 분리해서 효율적으로 처리가 필요한 네트워크 프로그래밍에서는 거의 필수인 것 같습니다.

또는 파일에 데이터를 읽어서 네트워크로 전송하는 업로드 기능에도 유용합니다. BufferBlock를 이용하면 지연이 발생하는 두 구간을 각각의 기능을 독립적으로 만들면서 최상의 속도를 구현할 수 있습니다.

3개의 좋아요

이제 비동기 동기화를 할 수 있게 되었군요. 1.0부터 있었고…비동기 동기화라는 말이 좀 이상하긴하지만…ㅋㅋ