使用Azure搜索时出现大量任务取消异常.Net SDK异步合并或上传文档



我们正在使用Azure搜索。Net SDK(v3.0.4(,用于将文档合并或上载到azure搜索索引之一。

我们使用以下代码进行相同操作:

var batch = IndexBatch.MergeOrUpload(documentList);
await searchIndexClient.Documents.IndexAsync(batch);

我们正在使用相同的搜索客户端对2种类型的子索引进行索引。当有高负载时,我们会面临许多任务取消的异常,并且操作失败,而没有任何内部异常的提示。

Stacktrace供参考:系统。线程。任务。TaskCanceledException:任务已取消。在系统中。运行时。编译器服务。任务等待者。ThrowForNonSuccess(任务任务(在系统中。运行时。编译器服务。任务等待者。HandleNonSuccessAndDebuggerNotification(任务任务(在微软。Rest.RetryDelegatingHandler。<gt;c_DisplayClass11_0。<b_1>d.MoveNext((---从引发异常的前一位置开始的堆栈结尾跟踪---在系统中。运行时。例外服务。ExceptionDispatchInfo。Throw((在系统中。运行时。编译器服务。任务等待者。ThrowForNonSuccess(任务任务(在系统中。运行时。编译器服务。任务等待者。HandleNonSuccessAndDebuggerNotification(任务任务(在微软。Rest.RetryDelegatingHandler.d__11.MoveNext((---从引发异常的前一位置开始的堆栈结尾跟踪---在系统中。运行时。例外服务。ExceptionDispatchInfo。Throw((在系统中。运行时。编译器服务。任务等待者。ThrowForNonSuccess(任务任务(在系统中。运行时。编译器服务。任务等待者。HandleNonSuccessAndDebuggerNotification(任务任务(在系统中。网Http。HttpClient.d_58.MoveNext((---从引发异常的前一位置开始的堆栈结尾跟踪---在系统中。运行时。例外服务。ExceptionDispatchInfo。Throw((在系统中。运行时。编译器服务。任务等待者。ThrowForNonSuccess(任务任务(在系统中。运行时。编译器服务。任务等待者。HandleNonSuccessAndDebuggerNotification(任务任务(在微软。蔚蓝色的搜索文档操作.d_23.MoveNext((---从引发异常的前一位置开始的堆栈结尾跟踪---在系统中。运行时。例外服务。ExceptionDispatchInfo。Throw((在系统中。运行时。编译器服务。任务等待者。ThrowForNonSuccess(任务任务(在系统中。运行时。编译器服务。任务等待者。HandleNonSuccessAndDebuggerNotification(任务任务(在微软。蔚蓝色的搜索文档操作扩展.d_13`1.MoveNext((---从引发异常的前一位置开始的堆栈结束跟踪---

您应该发布带有堆栈跟踪的确切异常。

您是否尝试在代码中设置断点,并查看您还有哪些其他信息?这也将有助于看到更多的代码。例如,您如何创建搜索客户端以及批量大小。

我们也看到过类似的问题,提交一个批次会随机失败。在我们的案例中,我认为这是Azure的一些间歇性问题。我用重试功能包装了对Azure搜索服务的所有调用,这样它会等待一段时间,然后重试多次,最后才会失败。如果它与高负载有关,那么在您的案例中可能会发生类似的情况。

从我们的离线讨论中添加有助于造福社区的解决方案。

问题可能是由于TCP连接池不足,添加连接设置显示有所改进。为了解决调用搜索服务时的其他异常(任务取消异常、Http套接字异常、IndexBatch异常、Null引用异常、服务太忙异常等(,根据要求进行了额外的修改/修复:

  1. 增加服务副本
  2. 通过减少呼叫来降低搜索服务的负载
  3. 添加延迟

感谢Bruce和Sonia。

最新更新