我正在使用Azure 搜索客户端库,并且我想使用不同的查询参数并行多次调用查询。当我尝试这个时,我得到了异常:
“集合已修改;枚举操作可能无法执行。”
我通过在调用之前添加一个 SemaphoreSlim 对象来处理这个问题,这可以防止多个线程同时执行查询。然而,这个解决方案使执行时间加倍。
private static readonly SemaphoreSlim syncLock = new SemaphoreSlim(1);
....
await syncLock.WaitAsync();
result = await SearchClient.Indexes[IndexName].QueryAsync<MyIndex>(queryParams);
syncLock.Release();
由于每个查询都是一个独立的调用,我假设线程不应该相互影响?