このパターンを必要とするサーバーへの要求の同期キューを作成するための正しい方向に誰かが私を導くことができるかどうか疑問に思っています。
コードで既に実装されている async/await パターンを引き続き使用し、アップロード パラメーターとダウンロードされた結果 (JSON でシリアル化される) の両方で汎用的な GET および POST 要求の両方をエンキューできるようにしたいと考えています。
助言がありますか?
このパターンを必要とするサーバーへの要求の同期キューを作成するための正しい方向に誰かが私を導くことができるかどうか疑問に思っています。
コードで既に実装されている async/await パターンを引き続き使用し、アップロード パラメーターとダウンロードされた結果 (JSON でシリアル化される) の両方で汎用的な GET および POST 要求の両方をエンキューできるようにしたいと考えています。
助言がありますか?
TPLデータフローライブラリActionBlock<T>
から使用することをお勧めします。
または、 AsyncExライブラリAsyncProducerConsumerQueue
から使用することもできます。
サービスが完全に同期している場合でも、クライアント コードは非同期である可能性があります。ServiceBehaviorAttribute を設定して、サービスがリクエストを次々と実行するようにすることができます。サービスホストを開くために使用したのと同じスレッドで実行することもできます。サービスが「await」を実行しない場合、サービスは同期的に実行されます。この設計を使用すると、クライアントを壊すことなく、必要に応じてサービスを強化できます。いくつかのヒントについては、私の投稿を参照してください。
シングルスレッドアクセスが必要な場合は、ロックを使用してください。これに相当する非同期があります: AsyncLock
(またはAsyncSemaphore
)。
キューやデータフローなどの複雑な構造は必要ありません。(AsyncSemaphore
フードの下にそのようなキューが1つありますが、それは問題ではありません)。