WebClient 需要 43 秒才能下载此 json 字符串 https://jsonplaceholder.typicode.com/posts
WebClient taking 43 seconds to download this json string https://jsonplaceholder.typicode.com/posts
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; }
}
}
我认为代码不是这里的问题。更重要的是您的 ISP 或您尝试联系的服务器/流量可用的带宽。
一些工具可以帮助您专门诊断 windows 中的问题以发现您的问题,包括
- 'tracert'(追踪路线)
- 'ping'(平)
在Windows中:
ping jasonplaceholder.typicode.com
查看 "hops"
之间的延迟
tracert jsonplaceholder.typicode.com
假设服务器响应 ping 请求 ICMP,这将以毫秒为单位提供您尝试访问的服务器的延迟。
根据我现在使用的 HttpClient 的 @maccettura 和 @ckuri 的建议,我认为我会很好 post 这里的代码。
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; }
}
}
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; }
}
}
我认为代码不是这里的问题。更重要的是您的 ISP 或您尝试联系的服务器/流量可用的带宽。
一些工具可以帮助您专门诊断 windows 中的问题以发现您的问题,包括
- 'tracert'(追踪路线)
- 'ping'(平)
在Windows中:
ping jasonplaceholder.typicode.com
查看 "hops"
之间的延迟tracert jsonplaceholder.typicode.com
假设服务器响应 ping 请求 ICMP,这将以毫秒为单位提供您尝试访问的服务器的延迟。
根据我现在使用的 HttpClient 的 @maccettura 和 @ckuri 的建议,我认为我会很好 post 这里的代码。
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; }
}
}