想通过Octokit获得GitHub回购

时间:2015-08-24 13:50:09

标签: c# github-api octokit.net

我正在构建简单的工具,可以通过用户提供的链接从在线公共GitHub repos下载.lua文件。我开始学习异步方法,所以我想测试自己。

这是一个控制台应用程序(暂时)。最终的目标是在回购中获取.lua文件并询问用户他想要下载哪些文件,但如果我现在连接到GH,我会很高兴。

我正在使用Octokit(https://github.com/octokit/octokit.net)GitHub API与.NET集成。

这是减少的代码;我删除了一些不重要的东西:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Octokit;

namespace GetThemLuas
{
    class Program
    {
        static readonly GitHubClient Github = new GitHubClient(new ProductHeaderValue ("Testing123"), new Uri("https://www.github.com/"));


        static void Main(string[] args)
        {
            Console.WriteLine("Welcome to GitHub repo downloader");
            GetRepoTry4();

        }

        private static async void GetRepoTry4()
        {
            try
            {
                Console.WriteLine("Searching for data"); //returns here... code below is never ran
                var searchResults = await Github.Search.SearchRepo(new SearchRepositoriesRequest("octokit"));
                if (searchResults != null)
                    foreach (var result in searchResults.Items)
                        Console.WriteLine(result.FullName);
                Console.WriteLine("Fetching data...."); //testing search
                var myrepo = await Github.Repository.Get("Haacked", "octokit.net");
                Console.WriteLine("Done! :)");
                Console.WriteLine("Repo loaded successfully!");
                Console.WriteLine("Repo owner: " + myrepo.Owner);
                Console.WriteLine("Repo ID: " + myrepo.Id);
                Console.WriteLine("Repo Date: " + myrepo.CreatedAt);
            }
            catch (Exception e)
            {
                Console.WriteLine("Ayyyy... troubles"); //never trigged
                Console.WriteLine(e.Message);
            }
        }
    }
}

问题是await`关键字,因为它终止方法并返回。

我还在学习异步方法,所以我可能搞砸了一些东西,但即使是我的ReSharper也说得很好。

我使用var替换task<T>内容。它对我来说没问题,也没有任何警告和错误。

我修正了await问题。现在,当我最终连接到GH并试图获得回购时,它在两次调用GH时都抛出了一个执行(通过先评论然后第二次调用进行测试)。 e.message是一些巨大的东西。

我将其记录到一个文件中,它看起来像一个HTML文档。这是(http://pastebin.com/fxJD1dUb

3 个答案:

答案 0 :(得分:1)

GetRepoTry4();更改为Task.Run(async () => { await GetRepoTry4(); }).Wait();,将private static async void GetRepoTry4()更改为private static async Task GetRepoTry4()

这应该可以让你至少正确连线,以开始调试真正的问题。

一般来说,所有async方法都需要返回TaskTask<T>,而返回TaskTask<T>的所有方法都应为async }。此外,您应该尽快将代码放入调度程序并开始使用等待。

答案 1 :(得分:0)

为Github安装Octokit Nuget Package。然后添加以下功能

from libcpp.algorithm cimport sort
import random

cpdef test_sort():
    cdef int *a = [1,2,3,4]
    cdef int z = random.randrange(5)
    sort(&a[0], &a[3], lambda x,y: abs(x-z) < abs(y-z)) # doesn't compile

答案 2 :(得分:-1)

由于使用了async / await,您应该将方法GetRepoTry4的定义更改为以下内容:

private static async Task GetRepoTry4()

编辑: 然后在Main方法中调用它GetRepoTry4().Wait();。这将使方法GetRepoTry4()得以等待。