C# WebClient花43秒下载此json字符串https://jsonplaceholder.typicode.com/posts
12个小时前(大约在德克萨斯州的晚餐时间),它工作得很好,而我希望延迟会很高,因为流量很大 你知道为什么会发生这种情况,以及如何解决这个问题吗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
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”(跟踪路由)
- "平"(平)
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; }
}
}