私がやりたいのはこれです-
サービスへのプロキシ呼び出しを行い、非同期コールバックを介して別のスレッドでデータを受信したい...トリッキーな部分は、すべてのデータが取得されるまでフォアグラウンドスレッドをスリープ状態にしたいということです。
これを行うために同期メソッドを使用していない理由は、ページングを使用してデータをチャンクで返すWCFサービスのAPIを作成しているためです。
クライアントがページングを使用できるようにしたいのですが、すべてのページングコールバックをAPIに公開したくありません...APIが同期データ取得メソッドを公開しているように見せたいです。
クラスメソッドとコールバックにアクセスできるプライベート静的セマフォ(スレッドに依存しないため)を使用してみましたが、実行を一時停止する手段として単一のユニット容量があります。
まず、Semaphore.WaitOne()ステートメントを使用します。
次に、フォアグラウンドスレッドでプロキシ呼び出しを実行すると、サービスがデータ取得を処理するスレッドを作成し、制御がクライアントに返されます。
クライアントでは、すぐに2番目のSemaphore.WaitOne()ステートメントを使用します。これにより、フォアグラウンドスレッドの実行が一時停止されます。次に、「ページング完了」コールバックが別のスレッドで実行されると、Semaphore.Release()を使用しますが、フォアグラウンドスレッドが2番目のSemaphoreステートメントを通過することはなく、ロックされたままになるため、クライアントがフリーズします。
私が間違ってやっているアイデアはありますか、それとももっと効果的な別のロック設計がありますか?