public static void BeginTest(string url, int times, int gap, CancellationToken ct)
        {
            MainWindow.Current.TheList.Items.Clear();
            for (int i = 0; i < times; i++)
            {
                int num = i;
                using (WebClient client = new WebClient())
                {
                    TestRecord record = new TestRecord();
                    record.Number = num + 1;
                    client.DownloadStringCompleted += (sender, e) =>
                    {
                        string response    = e.Result;
                        var    sendTime    = record.RawSendTime;
                        var    receiveTime = DateTime.Now;

                        record.ReceiveTime = FormatTime(receiveTime);
                        record.Delay       = (receiveTime - sendTime).TotalMilliseconds;
                        record.Response    = response;

                        MainWindow.Current.Dispatcher.BeginInvoke(new Action(() =>
                        {
                            MainWindow.Current.TheList.Items.Refresh();
                        }));
                    };
                    Task.Factory.StartNew(() =>
                    {
                        Thread.Sleep(num * gap);
                        record.RawSendTime = DateTime.Now;
                        record.SendTime    = FormatTime(record.RawSendTime);
                        client.DownloadStringAsync(new Uri(url));

                        MainWindow.Current.Dispatcher.BeginInvoke(new Action(() =>
                        {
                            MainWindow.Current.TheList.Items.Add(record);
                        }));
                    }, ct);
                }
            }
        }
        public static async Task <TestRecord> DoSingleRequest(string url, int number, int gap)
        {
            await Task.Delay(number *gap);

            using (WebClient client = new WebClient {
                Encoding = System.Text.Encoding.Default
            })
            {
                TestRecord record   = new TestRecord();
                var        sendTime = DateTime.Now;
                string     response = await client.DownloadStringTaskAsync(url);

                var receiveTime = DateTime.Now;

                record.Number      = number;
                record.SendTime    = FormatTime(sendTime);
                record.ReceiveTime = FormatTime(receiveTime);
                record.Delay       = (receiveTime - sendTime).TotalMilliseconds;
                record.Response    = response;

                return(record);
            }
        }
        public static async Task BeginTest(string url, int times, int gap, CancellationToken ct)
        {
            MainWindow.Current.TheList.Items.Clear();
            List <TestRecord> tasks = new List <TestRecord>();

            for (int i = 0; i < times; i++)
            {
                int num = i;
                using (WebClient client = new WebClient())
                {
                    TestRecord record = new TestRecord();
                    record.Number = num + 1;
                    var task = Task.Delay(num * gap, ct).ContinueWith(t =>
                    {
                        record.RawSendTime = DateTime.Now;
                        record.SendTime    = FormatTime(record.RawSendTime);
                        return(client.DownloadStringTaskAsync(url));
                    }, ct);
                    //var task = new Task<Task<string>>(async () =>
                    //{
                    //    await Task.Delay(num * gap);
                    //    record.RawSendTime = DateTime.Now;
                    //    record.SendTime = FormatTime(record.RawSendTime);
                    //    MainWindow.Current.TheList.Items.Add(record);
                    //    return client.DownloadStringTaskAsync(url);
                    //}, ct);
                    record.Task = task;
                    tasks.Add(record);
                }
            }
            foreach (var record in tasks)
            {
                string response    = await await record.Task;
                var    sendTime    = record.RawSendTime;
                var    receiveTime = DateTime.Now;

                record.ReceiveTime = FormatTime(receiveTime);
                record.Delay       = (receiveTime - sendTime).TotalMilliseconds;
                record.Response    = response;

                MainWindow.Current.TheList.Items.Add(record);
            }

            //List<Task<TestRecord>> requests = new List<Task<TestRecord>>();
            //for (int i = 0; i < times; i++)
            //{
            //    requests.Add(DoSingleRequest(url, i + 1, gap));
            //}
            //foreach (var r in requests)
            //{
            //    MainWindow.Current.TheList.Items.Add(await r);
            //}

            //var requests = Enumerable.Range(0, times).Select(async i =>
            //{
            //    await Task.Delay(gap);
            //    return DoSingleRequest(url, i + 1);
            //}).ToList();
            //requests.ForEach(async r =>
            //{
            //    MainWindow.Current.TheList.Items.Add(await r);
            //});
            //for (int i = 0; i < times; i++)
            //{
            //    await AddRecord(url, i + 1);
            //    //await Task.Delay(gap);
            //}
        }