C# WebClient花43秒下载此json字符串https://jsonplaceholder.typicode.com/posts

C# WebClient花43秒下载此json字符串https://jsonplaceholder.typicode.com/posts,c#,webclient,nancy,C#,Webclient,Nancy,12个小时前(大约在德克萨斯州的晚餐时间),它工作得很好,而我希望延迟会很高,因为流量很大 你知道为什么会发生这种情况,以及如何解决这个问题吗 using System; using System.Collections.Generic; using System.Net; using System.Net.Http; using System.Text; using System.Threading; using System.Threading.Tasks; using Nancy.Json

12个小时前(大约在德克萨斯州的晚餐时间),它工作得很好,而我希望延迟会很高,因为流量很大

你知道为什么会发生这种情况,以及如何解决这个问题吗

using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Nancy.Json;

namespace Training.Threading
{
    class TasksDemo
    {
        static async Task Main(string[] args)
        {
            Post[] posts = await GetPostsAsync();

            foreach(Post post in posts)
                System.Console.WriteLine(post.Title);
        }

        public static Task<Post[]> GetPostsAsync() => Task.Run(() =>
         {
             var json = new WebClient().DownloadString("https://jsonplaceholder.typicode.com/posts");
             JavaScriptSerializer ser = new JavaScriptSerializer();
             var posts = ser.Deserialize<Post[]>(json);
             return posts;
         });
    }
    public class Post
    {
        public int UserId { get; set; }
        public string Title { get; set; }
        public string Body { get; set; }
    }
}
使用系统;
使用System.Collections.Generic;
Net系统;
使用System.Net.Http;
使用系统文本;
使用系统线程;
使用System.Threading.Tasks;
使用Nancy.Json;
名称空间训练。线程
{
类任务DEMO
{
静态异步任务主(字符串[]args)
{
Post[]posts=wait GetPostsAsync();
foreach(以职位为单位的职位)
系统控制台写入线(post.Title);
}
公共静态任务GetPostsAsync()=>Task.Run(()=>
{
var json=new WebClient()。下载字符串(“https://jsonplaceholder.typicode.com/posts");
JavaScriptSerializer ser=新的JavaScriptSerializer();
var posts=ser.Deserialize(json);
返回岗位;
});
}
公营职位
{
public int UserId{get;set;}
公共字符串标题{get;set;}
公共字符串体{get;set;}
}
}

我认为代码不是这里的问题。更重要的是,您的ISP或bandwith可用于您尝试联系的服务器/流量

一些工具可以帮助您在windows中专门诊断问题以发现问题,包括

  • “tracert”(跟踪路由)
  • "平"(平)
在Windows中:

ping jasonplaceholder.typicode.com 
查看“跃点”之间的延迟


这将在毫秒内为您尝试访问的服务器提供延迟,假设它们响应ping请求ICMP。

根据我现在使用的HttpClient的@maccettura和@ckuri的建议,我想我最好在这里发布代码

using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Nancy.Json;

namespace Training.Threading
{
    class TasksDemo
    {
        static async Task Main(string[] args)
        {
            string json = await GetPostsAsync();
            // System.Console.WriteLine(json);
            JavaScriptSerializer ser = new JavaScriptSerializer();
            var posts = ser.Deserialize<Post[]>(json);

            foreach(Post post in posts)
                System.Console.WriteLine(post.Title);
        }

        public static async Task<string> GetPostsAsync()
        {
            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri(@"https://jsonplaceholder.typicode.com");
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                return await client.GetStringAsync("/posts");
            }
        }
    }
    public class Post
    {
        public int UserId { get; set; }
        public string Title { get; set; }
        public string Body { get; set; }
    }
}
使用系统;
使用System.Net.Http;
使用System.Net.Http.Header;
使用System.Threading.Tasks;
使用Nancy.Json;
名称空间训练。线程
{
类任务DEMO
{
静态异步任务主(字符串[]args)
{
字符串json=await GetPostsAsync();
//System.Console.WriteLine(json);
JavaScriptSerializer ser=新的JavaScriptSerializer();
var posts=ser.Deserialize(json);
foreach(以职位为单位的职位)
系统控制台写入线(post.Title);
}
公共静态异步任务GetPostsAsync()
{
使用(HttpClient=new HttpClient())
{
client.BaseAddress=新Uri(@“https://jsonplaceholder.typicode.com");
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
返回wait-client.GetStringAsync(“/posts”);
}
}
}
公营职位
{
public int UserId{get;set;}
公共字符串标题{get;set;}
公共字符串体{get;set;}
}
}

FYI,
HttpClient
上有异步方法。此外,WebClient也不推荐使用。在文档中,微软建议使用HttpClient。按照大家@maccettura和kuri的建议,我现在使用的是HttpClient,但输出相同。将在一天中的不同时间继续测试代码,以消除由于网络拥塞导致的高延迟的可能性。正如您所指出的,问题似乎与服务器有关。我将在一天中的不同时间继续测试代码。谢谢你的回复,我选择了它作为答案。
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Nancy.Json;

namespace Training.Threading
{
    class TasksDemo
    {
        static async Task Main(string[] args)
        {
            string json = await GetPostsAsync();
            // System.Console.WriteLine(json);
            JavaScriptSerializer ser = new JavaScriptSerializer();
            var posts = ser.Deserialize<Post[]>(json);

            foreach(Post post in posts)
                System.Console.WriteLine(post.Title);
        }

        public static async Task<string> GetPostsAsync()
        {
            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri(@"https://jsonplaceholder.typicode.com");
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                return await client.GetStringAsync("/posts");
            }
        }
    }
    public class Post
    {
        public int UserId { get; set; }
        public string Title { get; set; }
        public string Body { get; set; }
    }
}