我正在构建简单的工具,可以通过用户提供的链接从在线公共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)
答案 0 :(得分:1)
将GetRepoTry4();
更改为Task.Run(async () => { await GetRepoTry4(); }).Wait();
,将private static async void GetRepoTry4()
更改为private static async Task GetRepoTry4()
。
这应该可以让你至少正确连线,以开始调试真正的问题。
一般来说,所有async
方法都需要返回Task
或Task<T>
,而返回Task
或Task<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()
得以等待。