加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在Mono上简单的HttpClient测试失败

发布时间:2020-12-16 01:56:38 所属栏目:百科 来源:网络整理
导读:在Mac OS X上对Mono(3.2.1)执行这个简单的小测试时,它从不打印任何对控制台的响应,而是说关闭终结器线程超时. 这段代码有问题还是我的Mono行为不端? using System;using System.Net.Http;namespace VendTest{ class MainClass { public static void Main(st
在Mac OS X上对Mono(3.2.1)执行这个简单的小测试时,它从不打印任何对控制台的响应,而是说关闭终结器线程超时.
这段代码有问题还是我的Mono行为不端?

using System;
using System.Net.Http;

namespace VendTest
{
  class MainClass
  {
        public static void Main(string[] args)
        {
            Client client = new Client();
            client.HttpClientCall();
        }
    }

    public class Client
    {
        HttpClient client;

        public Client()
        {
            client = new HttpClient();
        }

        public async void HttpClientCall()
        {
            HttpClient httpClient = new HttpClient();
            HttpResponseMessage response = await httpClient.GetAsync("http://vendhq.com");
            string responseAsString = await response.Content.ReadAsStringAsync();
            Console.WriteLine(responseAsString);
        }
    }
}

解决方法

你几乎不应该使用异步void方法,这就是原因之一.你的Main()将在HttpClientCall()实际完成之前结束.由于退出Main()会终止整个应用程序,因此不会打印任何内容.

你应该做的是在Main()中将你的方法改为异步Task和Wait(). (混合await和Wait()通常会导致死锁,但它是控制台应用程序的正确解决方案.)

class MainClass
{
    public static void Main()
    {
        new Client().HttpClientCallAsync().Wait();
    }
}

public class Client
{
    HttpClient client = new HttpClient();

    public async Task HttpClientCallAsync()
    {
        HttpClient httpClient = new HttpClient();
        HttpResponseMessage response = await httpClient.GetAsync("http://vendhq.com");
        string responseAsString = await response.Content.ReadAsStringAsync();
        Console.WriteLine(responseAsString);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读