将 .net Azure 搜索 SDK 升级到版本 9 后,我无法进行搜索。通话一直挂起:
azureSearchIndexClient.Documents.Search(query, parameters);
我没有收到错误,在 5.0.3 上一切正常,我仍然可以在版本 9 中创建、填充和删除索引。没有任何响应,我没什么可继续的...
最佳答案
这是 SDK 9.0.0 版本中的错误,在此处跟踪:https://github.com/Azure/azure-sdk-for-net/issues/6254此问题已在版本 9.0.1 中得到修复,现在可以在 NuGet 上下载。截至撰写本文时,8.0.0-预览版仍然受到此错误的影响。
原因是缺少对 ConfigureAwait(false)
的调用,这会导致在 ASP.NET 经典应用上下文中调用 SDK 时出现死锁。
该错误仅影响用于发送 POST 请求的代码路径。这就是为什么将 UseHttpGetForQueries
设置为 true
是一种有效的解决方法。但是,在修复可用之前,这只能用作临时解决方案,特别是当您的应用程序发送可能不适合 URL 查询字符串的非常大的查询时。
另请注意,仅当阻塞从异步方法返回的任务时才会发生死锁。 SDK 的同步方法在内部执行此操作。建议在 ASP.NET 中使 Controller 方法以及它们调用的可能执行 I/O 的所有方法(包括 Azure 搜索 SDK 的方法)异步。这可以防止操作系统线程阻塞,从而大大提高应用程序的可扩展性。它还避免了由于缺少对 ConfigureAwait(false)
的调用而导致的潜在死锁问题。
关于azure-cognitive-search - 将 Azure 搜索 SDK 从 v.5.0.3 升级到 v.9。搜索通话挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56119762/