0

두 개의 .net 응용 프로그램간에 동일한 BlockingCollection을 공유하는 방법이 있습니까? 하나의 응용 프로그램이 새 항목을 생성하고 다른 응용 프로그램이이를 사용하는 중입니까?BlockingCollection을 프로세스간에 공유

내가 발견 한 프로세스 간 통신 옵션에는 데이터 직렬화 및 비 직렬화가 포함되어있는 것처럼 보입니다. 따라서 한 프로세스에서 다른 프로세스로 BlockingCollection을 전달할 위치에 있으면 연결이 끊어진 복사본과 이후의 원본 컬렉션은 복사본에 영향을 미치지 않습니다.

BlockingCollection을 사용하면 콜백 또는 세마포와 비교하여 생산자 - 소비자 관계가 실제로 단순화되므로 가능한 경우 프로세스간에 데이터를 교환 할 때 계속 사용하고 싶습니다. BlockingCollection의

(의미는 다음과 같습니다
생산자는 단순히 추가 잠금 또는 동기화에 대한 걱정없이 컬렉션에 새 항목을 추가 할 수 있습니다 새로운 항목이 반복자가없는 경우
소비자는 단순히 컬렉션을 반복 할 수 있습니다. 블록, 새 항목이 생성 될 때마다 한 소비자가 자동으로 깨어나서 차단 해제됩니다.)

두 프로세스가 동일한 시스템에서 실행됩니다. 생산자와 소비자를 서로 다른 프로세스로 분리하려는 목표 중 하나는 생산자가 실행되는 동안 소비자를 다시 시작하거나 수정할 수있게하는 것이 었습니다. 그래서 이상적으로 나는 생산자가 소비자를 인식 할 필요가없는 해결책을 찾고있다.

+0

하나의 프로세스가 생산자이고 다른 프로세스가 소비자 인 경우 IPC를 사용하여 생산자의 새 항목을 소비자 프로세스로 보냅니다. 소비자 측에서는 'BlockingCollection'을 가지고 들어 오면 소비자 측에 새로운 아이템을 추가하십시오. –

+0

이 경우 생산자는 소비자를 항상 인식하지 못합니다. 즉, 소비자가 전체 시간을 실행하지 못하거나 재시작되거나 대체 될 수 있습니다. (이것은 두 경우를 분리하는 목적 중 하나입니다.) 나는 소비자가 콜백을 프로듀서와 등록하거나 프로듀서가 설정 한 세마포어를들을 수 있다고 생각하지만 프로듀서의 우아함을 단순히 소비자와 블로킹 콜렉션을 공유하는 것을 선호한다. 나는 그것이 쉽지 않을 것이라고 생각한다. – HugoRune

+0

'한 프로세스에서 다른 프로세스로 BlockingCollection을 전달할 곳이 있다면'아니요, 직렬화/직렬화를 사용하여 데이터를 전달하십시오. –

답변

0

요구 사항 (즉, 제작자가 항목을 추가하고 항목이 추가 될 때까지 사용자가 자고 있음)에 대한 설명에 따라 MSMQ를 사용하는 것이 좋습니다.

메시지를 큐에 추가하는 하나의 프로세스는 새 메시지를 사용할 수있을 때까지 기다리는 프로세스입니다. 대기중인 스레드는 메시지를 사용할 수있을 때까지 차단됩니다 (폴링이 사용되지 않음).