如何 return 来自异步方法 cosmos db 的结果?

how to return result from async method cosmodb?

经过研究,我发现文档数据库 api 支持分组,所以我已经使用 linq 实现了,

如何查看从数据库中获得的结果?

static void Main(string[] args)
        {
            Program p = new Program();
            var result =  p.GetStartedDemo().Wait();
        }

        private async Task GetStartedDemo()
        {
            var client = new DocumentClient(new Uri(EndpointUri), PrimaryKey);
            var documentUri = UriFactory.CreateDocumentCollectionUri("testdb", "retrieve");
            var result = client.CreateDocumentQuery<Login>(documentUri)
                  .Where(i => i.logevent == "success" && i._ts > 1517405472 && i._ts <= 1518010272)
                  .GroupBy(t => t._ts);

            return result;
        }

错误:

var 结果 = p.GetStartedDemo().Wait();

无法分配隐式类型的代码变量。有什么问题?

您正在执行任务对象的 "Wait" 方法并试图将其 return 分配给 "result" 变量。 如果你检查 Task.Wait() method signature 你会发现它没有 return:

public void Wait();

我是你的例子,你的 GetStartedDemo 到 return 一个任务并成为 "async" 是没有必要的,你没有在其中进行任何异步操作。您可以简单地 return 您想要适合调用方方法的内容。

如果您想了解 CosmosDB,我建议您查看 Microsoft documentation about it

为了使您的代码正常工作,您只需更改方法的 return 类型以实际匹配您的方法 returning:

// Considering that Login._t is of type "long":
private IEnumerable<IGrouping<long, Login>> GetStartedDemo()
{ /* ... */ }    

然后,在您的 Main 方法中,您可以打印按 Login._t 分组的项目:

    static void Main(string[] args)
    {
        Program p = new Program();
        var result =  p.GetStartedDemo();
        foreach (var group in result)
        {
            Console.WriteLine("Group: " + group.Key);

            foreach (Login login in group)
               Console.WriteLine("    " + login.SomeProperty); // print something from the login object.
        }
    }