라이브러리를 작성 중이며 지정된 스레드에서 콜백을 실행하고 싶기 때문에 최종 사용자는 스레드 안전성에 대해 걱정할 필요가 없습니다.지정된 스레드에서 콜백을 수행 할 수있는 방법이 있습니까?
ExecutionContext
을 사용해 보았지만 너무 잘 작동하지 않아 지정된 컨텍스트 (새 스레드)에서 실행되지만 원래 해당 함수를 호출 한 스레드에서는 실행되지 않습니다. 다시 전화를받을 수 있습니다 때 보장 할 수 없습니다, 또는 어떤 스레드 당신의 콜백 함수를 실행합니다 - 비동기 기능에 대한 일을의
void Connect() {
// This should be in the same thread ..
SocketAsyncEventArgs.Completed += eventHandler;
Socket.ConnectAsync(SocketAsyncEventArgs)
}
void eventHandler() {
// .. as this
}
이벤트 처리기를 작성할 때 동일한 스레드 (이벤트를 생성 한 개체를 만든 스레드) 또는 다른 스레드에서 실행되는 것으로 주석 처리합니다. 그런 다음 계약자를 읽고 그에 따라 대응하도록 소비자에게 맡깁니다 (즉, 이벤트 처리기가 적절한 스레드로 보내거나 게시해야합니다) - 때때로 UI 스레드에 제어권을 반환하는 것이 적절합니다. SynchronizationContext) 다른 시간에는 * 매우 나쁘고 * 교착 상태가 발생할 수 있습니다. –
이 경우 주석은 어떻게 도움이됩니까? 프레임 워크 및/또는 OS가 적절한 스레드에서 이벤트 처리기를 호출합니까? – cHao
@cHAo "나는 소비자에게 맡긴다. (처리기) ..."따라서 왜 "대답"이 아닌 코멘트가 될까? –