繁体   English   中英

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

[英]Getting lots of Task Canceled Exception when using Azure Search .Net SDK to merge or upload documents asynchronously

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

我们正在使用以下代码:

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

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

Stacktrace 供参考: System.Threading.Tasks.TaskCanceledException:任务已取消。 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Microsoft.Rest.RetryDelegatingHandler.<>c__DisplayClass11_0.<b__1>d.MoveNext)---从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() (任务任务)在 Microsoft.Rest.RetryDelegatingHandler.d__11.MoveNext() --- 从先前引发异常的位置结束堆栈跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime。 CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification( 任务任务)在 System.Net.Http.HttpClient.d__58.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime .CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Azure.Search.DocumentsOperations.d__23.MoveNext() --- 堆栈跟踪从先前位置结束异常被抛出 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft.Azure 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()。 Search.DocumentsOperationsExtensions.d__13`1.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 ---

您应该使用堆栈跟踪发布确切的异常。

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

我们已经看到提交批次会随机失败的类似问题。 在我们的案例中,我认为 Azure 存在一些间歇性问题。 我用重试功能包装了对 Azure 搜索服务的所有调用,以便它会稍等片刻,然后在最终失败之前重试多次。 如果与高负载有关,您的情况可能会发生类似的情况。

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

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

  1. 增加服务副本。
  2. 通过减少调用来减少搜索服务的负载。
  3. 添加延迟。

谢谢布鲁斯和索尼娅。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM