То, что я хочу сделать, это--
Я хочу сделать прокси-вызов для службы и получить данные в отдельном потоке с помощью асинхронного обратного вызова ... Сложность состоит в том, что я хочу, чтобы поток переднего плана спал, пока не будут получены все данные.
Причина, по которой я не использую синхронный метод для этого, заключается в том, что я создаю API для службы WCF, которая использует пейджинг и возвращает данные кусками.
Я хочу, чтобы мой клиент мог использовать пейджинг, но я не хочу показывать все мои обратные вызовы пейджинга моему API ... Я хочу, чтобы это выглядело так, как будто API предоставляет синхронный метод извлечения данных.
Я пытался использовать закрытый статический семафор (потому что он не зависит от потоков), который доступен для методов класса и обратных вызовов, с возможностью использования одной единицы в качестве средства для приостановки выполнения.
Сначала я использую оператор Semaphore.WaitOne ().
Затем я выполняю прокси-вызов в потоке переднего плана, и служба создает поток, который обрабатывает извлечение данных, и управление передается обратно клиенту.
В клиенте я немедленно использую второй оператор Semaphore.WaitOne ().
Это должно приостановить выполнение потока переднего плана, что он и делает.
Затем, после выполнения обратного вызова «Paging Completed» в отдельном потоке, я использую Semaphore.Release ()
Но поток переднего плана никогда не пересекает второй оператор Semaphore, он остается заблокированным и клиент останавливается.
Есть идеи, что я делаю неправильно, или есть другой дизайн блокировки, который был бы более эффективным?