【问题标题】:Azure DocumentDB async requests issueAzure DocumentDB 异步请求问题
【发布时间】:2016-09-09 04:28:48
【问题描述】:

这里我尝试在 c# 中执行一个 azure documentdb 存储过程。

    static string EndpointUri = "https://asdf.documents.azure.com:443/";
    static string PrimaryKey = "X";
    static DocumentClient client = new DocumentClient(new Uri(EndpointUri), PrimaryKey);

    static void Main(string[] args)
    {
        var x = doit();
        Read();
    }
    public static async Task<string> doit()
    {

        StoredProcedureResponse<string> sprocResponse = await client.ExecuteStoredProcedureAsync<string>("/dbs/eew/colls/fff/sprocs/ggg/", "kamal@enadoc.com");
        return "";
    }

我希望方法调用ExecuteStoredProcedureAsync 被同步执行。这是我的做法。

据我了解,这现在应该作为同步方法调用工作,因为我在请求中添加了等待。但它不是那样工作的。

我确信这是因为我对 c# 的异步等待用法缺乏了解。

我在 google 上找不到解决此问题的方法。

我怎样才能使这个同步。

【问题讨论】:

  • 您现在可能想在 Azure 中更改您的密钥;您刚刚获得了 Internet 访问权限以创建数据库并在您的帐户上花钱:)
  • @Frans 谢谢!。但是我在发布之前更改了一些字符。我没那么笨:)。
  • 您好,只是一般建议;最好在发布前将其更改为 xxx。最好的情况是让像我这样的人担心,最坏的情况是有人将其用作种子来暴力破解密码……如果该帐户中包含生产数据而我是您的 csio,我会坚持现在更改它:)
  • 这是一个控制台应用程序吗?它是如何运行的 - 手动执行、作为 Windows 服务运行等?

标签: c# azure async-await azure-cosmosdb


【解决方案1】:

改变

var x = doit();

 var x = doit().Result;

注意;这在这个简单的控制台应用程序中可以正常工作,但可能会在实际应用程序中导致死锁。如果你必须让它在一个真实的应用程序中同步,你应该做这样的事情;

var x = Task.Run(() => doit()).Result;

对此的解释超出了我可以轻松提出的答案,抱歉。如果您可以访问 Pluralsight,这是 Jon Skeet 的精彩解释:https://www.pluralsight.com/courses/skeet-async。 否则,C# in A Nutshell(本书)或在线教程。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-09-12
  • 2010-11-27
  • 2021-06-13
  • 2019-06-03
  • 2016-04-25
  • 1970-01-01
  • 2011-06-06
  • 2016-11-30
相关资源
最近更新 更多