使用下面的代码我试图使用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");
}
答案 0 :(得分:2)
您无法在控制台应用中使用async/await
,因为控制台应用不支持异步主方法。如果你想进一步了解这个问题,Stephen Cleary在他的博客中谈到这一点:Async Console Programs。
对于您的代码,它将如下所示:
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
话题中最多产的开发者之一。我推荐你的博客作为这个主题的一个很好的内容来源。
答案 1 :(得分:1)
将代码更改为此解决了问题,找到了我在第一次研究中错过的模糊堆栈溢出帖子,显然在使用等待时需要与“任务”配对。如果有人愿意为此添加更多详细信息,请为将来的观众添加评论。
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");
}