Azure cosmosdb 如何在同步应用程序中调用documentdb c#API

Azure cosmosdb 如何在同步应用程序中调用documentdb c#API,azure-cosmosdb,Azure Cosmosdb,我正在将documentdb添加到现有应用程序(~500kloc)。即使我想,我也不可能对这个应用程序进行“一路异步”重写 所有的C#API都是异步的。与这些调用同步的明显方法是.Wait()它们。这是一些微软示例应用程序所做的,然而,当我之前问了一个类似的问题时,大家的共识是“不要这样做。等等,你可能会面临死锁” 我在中发现了这个问题,所以没有答案,只有评论。一个说“做。等等”,一个说“使用等待”,另一个说“你不能做” “use await”无法解决问题,因为我们仍然是异步的,那么这些注释都不

我正在将documentdb添加到现有应用程序(~500kloc)。即使我想,我也不可能对这个应用程序进行“一路异步”重写

所有的C#API都是异步的。与这些调用同步的明显方法是
.Wait()
它们。这是一些微软示例应用程序所做的,然而,当我之前问了一个类似的问题时,大家的共识是“不要这样做。等等,你可能会面临死锁”

我在中发现了这个问题,所以没有答案,只有评论。一个说“做。等等”,一个说“使用等待”,另一个说“你不能做”


“use await”无法解决问题,因为我们仍然是异步的,那么这些注释都不能提供答案

您可以使用以下方法从非异步方法调用您的异步方法:

var myThread = System.Threading.Tasks.Task.Run(async () => await      
DoSomethingAsync());
然后您可以通过调用

myThread.Wait();

当存在同步上下文(ASP/WPF/Winforms)时,所有DocumentDB异步API都将使用Task.Run来运行任务。 这意味着,直接在DocumentDB C#API上调用.Result或.Wait是安全的。

阻止调用(n个示例是由于C#7之前缺少“async main”。
建议不要在应用程序中尽可能多地使用阻塞调用。

是否有官方Azure文档提到此行为?如果线程池达到其限制,是否会出现死锁?