0

Azure Search クライアント ライブラリを使用しており、さまざまなクエリ パラメーターを使用してクエリを複数回並行して呼び出したいと考えています。これを試すと、例外が発生します。

「コレクションが変更されました。列挙操作が実行されない可能性があります。」

呼び出しの前に SemaphoreSlim オブジェクトを追加して、複数のスレッドが同時にクエリを実行するのを防ぐことで、問題を処理しました。ただし、このソリューションでは実行時間が 2 倍になります。

private static readonly SemaphoreSlim syncLock = new SemaphoreSlim(1);
....

   await syncLock.WaitAsync();
   result = await SearchClient.Indexes[IndexName].QueryAsync<MyIndex>(queryParams);
   syncLock.Release();

各クエリは独立した呼び出しであるため、スレッドが互いに影響を受けるべきではないと思いますか?

4

1 に答える 1

1

内部には、サービス内で作成されたインデックスをリストする共通の列挙可能なオブジェクトがあります。取得しようとしているインデックスのメモリに参照がない場合は、ユーザーに代わってインデックスの統計、スキーマ、およびその他のプロパティを取得した後に参照が作成され、ユーザーに対して完全に透過的になります。ただし、この操作を別のスレッドで複数回並行して実行すると、この例外がスローされます。このフィードバックに感謝します。できるだけ早くライブラリを更新し、この状況を適切に処理できるように努めます。それまで (これには数日かかると思われます)、うまく機能する Semaphore ソリューションを使い続けてください。再度、感謝します!アレックス

于 2015-02-16T11:23:01.273 に答える