Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#API-从另一个类调用异步任务_C#_Api_Rest - Fatal编程技术网

C#API-从另一个类调用异步任务

C#API-从另一个类调用异步任务,c#,api,rest,C#,Api,Rest,希望你一切顺利,我正在用谷歌API做一些测试。我在PHP for API方面的知识相当不错,但我在C#中很难做到这一点。我的目标是: 创建“JourneyPlanner”类 内部调用API查询以查找两个邮政编码之间的距离 打印距离 在PHP中相当简单,但在C#中很难找到类似的方法。我可以从Main方法很好地运行调用,但是当我尝试实现我的新类时,也就是当我遇到一些问题时 我的课程相当简单: public class JourneyDistance { private

希望你一切顺利,我正在用谷歌API做一些测试。我在PHP for API方面的知识相当不错,但我在C#中很难做到这一点。我的目标是:

创建“JourneyPlanner”类 内部调用API查询以查找两个邮政编码之间的距离 打印距离

在PHP中相当简单,但在C#中很难找到类似的方法。我可以从Main方法很好地运行调用,但是当我尝试实现我的新类时,也就是当我遇到一些问题时

我的课程相当简单:

    public class JourneyDistance
    {
        private static readonly HttpClient client = new HttpClient();
        public async static Task GetPostCodeDistance()
        {
            string postCodeOne = "NR116BN";
            string postCodeTwo = "PE129JE";
            string url;

            url = $"https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins={postCodeOne}&destinations={postCodeTwo}&mode=driving&key=APIKEY";
            HttpResponseMessage response = await client.GetAsync(url);
            response.EnsureSuccessStatusCode();
            string responseBody = await response.Content.ReadAsStringAsync();
            var o = JObject.Parse(responseBody);
            Console.WriteLine(o);
            string child1 = (string)o["rows"][0]["elements"][0]["distance"]["text"];
            Console.WriteLine(child1);
        }
    }
我已经尝试了一些主要的方法,但我不能简单地运行这个方法,我的推理是,我希望在某个时候在整个系统中显示并运行这个API调用,所以需要能够在需要查询两个邮政编码时调用这个方法

    public class Program
    {
        private static readonly HttpClient client = new HttpClient();
        static void Main(string[] args)
        {
            JourneyDistance journeyDistance = new JourneyDistance();
            //await journeyDistance.GetPostCodeDistance();

            //journeyDistance.GetPostCodeDistance();
        }
    }

有人能帮忙吗?

因为
GetPostCodeDistance
是一种异步方法,当第一个
Wait
被点击时,它返回一个
任务
,将控制权交还给调用者

任务将在
GetPostCodeDistance
完成处理后完成,但您需要等待它完成,否则您的应用程序可能会过早退出

Main
方法中,可以执行以下操作:

journeyDistance.GetPostCodeDistance().GetAwaiter().GetResult();
它将阻止线程,直到
任务完成

通常,在调用异步方法时应该避免阻塞线程,但是顶级
Main
方法是此规则的一个例外

如果您使用的是C#7.1+,您还可以使
Main
方法异步:

static async Task Main(string[] args)
{
    JourneyDistance journeyDistance = new JourneyDistance();
    await journeyDistance.GetPostCodeDistance();
}
虽然这只是语法上的糖分:

private static async Task MainAsync(string[] args)
{
    JourneyDistance journeyDistance = new JourneyDistance();
    await journeyDistance.GetPostCodeDistance();
}

public static void Main(string[] args)
    => MainAsync(args).GetAwaiter().GetResult();