0

我正在使用Azure 搜索客户端库,并且我想使用不同的查询参数并行多次调用查询。当我尝试这个时,我得到了异常:

“集合已修改;枚举操作可能无法执行。”

我通过在调用之前添加一个 SemaphoreSlim 对象来处理这个问题,这可以防止多个线程同时执行查询。然而,这个解决方案使执行时间加倍。

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

在门后,有一个通用的可枚举对象,它列出了在服务中创建的索引。如果您尝试检索的索引的内存中没有引用,则会在代表您获取索引的统计信息、模式和其他一些属性后创建一个引用,对用户完全透明。但是,这个操作,如果在另一个线程上并行执行多次,就会抛出这个异常。非常感谢您的反馈,我尝试尽快更新库并相应地处理这种情况。在那之前(我怀疑​​这可能需要几天时间),请继续使用您的信号量解决方案,它效果很好。再次感谢!亚历克斯

于 2015-02-16T11:23:01.273 回答