0

使用下面的代码,我尝试使用 octokit.net 连接到 jquery 存储库,但代码似乎永远不会到达 print 语句。这种情况有什么原因吗,我知道 await 关键字导致了延迟,但核心问题是为什么我无法连接到存储库。谢谢

       static async void test()
    {

        var client = new GitHubClient(new ProductHeaderValue("OctokitTestsJordan"));

        var repository = await client.Repository.Get("jquery", "jquery");

        Console.WriteLine("aa");

    }
4

2 回答 2

2

您不能async/await在控制台应用程序中使用,因为控制台应用程序不支持异步主方法。如果您想了解有关此问题的更多信息,Stephen Cleary 在他的博客中谈到了这一点:异步控制台程序

对于您的代码,它将如下所示:

using Nito.AsyncEx; // get it on NuGet

class Program
{
    static void Main(string[] args)
    {
        AsyncContext.Run(() => MainAsync(args));
    }

    static async void MainAsync(string[] args)
    {
        await Test();
    }

    private static async Task Test()
    {
        var client = new GitHubClient(new ProductHeaderValue("OctokitTestsJordan"));

        var repository = await client.Repository.Get("jquery", "jquery");

        Console.WriteLine("aa");
    }
}

顺便说一句,Stephen Cleary 是该async/await主题最多产的开发人员之一。我向您推荐他的博客作为围绕这个主题的重要内容来源。

于 2015-09-27T12:35:59.367 回答
1

将代码更改为此解决了问题,在发现我在第一轮研究中错过的一个晦涩的堆栈溢出帖子后,显然在使用 await 时,如果有人愿意添加更多细节来说明为什么会这样,它需要与“任务”配对案例,请为未来的观众添加评论。

    static void Main(string[] args)
    {
        Task.Run(async () => { await test(); }).Wait();
    }

    private static async Task test()
    {

        var client = new GitHubClient(new ProductHeaderValue("OctokitTestsJordan"));

        var repository = await client.Repository.Get("jquery", "jquery");

        Console.WriteLine("aa");

    }
于 2015-09-27T11:11:49.367 回答