내 winforms 클라이언트 응용 프로그램에서 WCF 서비스 (Begin ... 및 End ...)에 대한 비동기 메서드를 생성했습니다.WCF 클라이언트 : EndGetX가 호출 될 때까지 BeginGetX에 대한 호출을 제한하십시오.
응용 프로그램이 시작되면 응용 프로그램에서 나중에 사용되는 데이터 (예 : 국가 목록)를 가져오고 캐시하기 위해 서버에 대한 비동기 호출을 만듭니다.
비동기 호출이 완료되기 전에 응용 프로그램의 주 스레드에서이 데이터 (예 : 콤보 상자 채우기)를 필요로하는 경우 비동기 호출이 종료 될 때까지 주 스레드를 차단하고 싶습니다. WCF 서버에 대한 중복 호출을 피하고 싶습니다.
나는 모니터/뮤텍스를 사용하려고하고 Monitor.Enter(countryLock)
메인 스레드에서 BeginGetCountries
과 EndGetCountries
메서드를 호출 할 Monitor.Exit(countryLock)
라고했다. 그러나 다음과 같은 예외가 있습니다.
비동기 코드 블록에서 개체 동기화 메서드가 호출되었습니다.
Monitor.Enter(...)
이라는 동일한 스레드에서 Monitor.Exit(...)
을 호출해야합니까? 그렇다면 어떻게 Monitor
개체의 소유자를 알 수 있으며 컨텍스트에서 전화를 걸 수 있습니까?
일부 컨텍스트에서 동기화 끝점이 필요한 경우 왜 구현하지 않습니까? 당신은 당신의 서비스를 통제하고 있습니까? –
여러 클라이언트가 동시에 같은 메서드를 호출하는 것에 신경 쓰지 않습니다. 단일 클라이언트가 동일한 데이터를 두 번 묻지 않도록 제한하고 싶습니다. 클라이언트는 데이터 비동기 적재를 미리 시도합니다. 그러나 클라이언트가 즉시 데이터를 필요로하고 캐시 된 데이터를 찾지 못하면 데이터가 진행 중임을 알지 못합니다. – Omtara