public async Task Test1(int maxServer, int maxRequests) { var server = new HttpServer.HttpServer(1234, maxServer); var serverThread = new Thread(async() => await server.StartAsync()); serverThread.Start(); var client = new HttpClient() { BaseAddress = new Uri("http://localhost:1234/") }; var requests = Enumerable.Repeat <Func <Task <HttpResponseMessage> > >(() => client.GetAsync("/"), maxRequests).Select(x => x.Invoke()).ToList(); await Task.WhenAll(requests); Dictionary <int, List <int> > requestsByThread = new Dictionary <int, List <int> >(); foreach (var r in requests.Select(x => x.Result.Content.ReadAsStringAsync())) { var str = await r;; var match = _regex.Match(str); Assert.True(match.Success); ParseAndAddToDict(match, requestsByThread); } // проверка счетчика foreach (var thread in requestsByThread.Keys) { var max = requestsByThread[thread].Max(); var actual = requestsByThread[thread].OrderBy(x => x); var expected = Enumerable.Range(1, max); Assert.Equal(expected, actual); } }
private async void Btn_start_httpserver_ClickAsync(object sender, EventArgs e) { string input = Frm.txt_httpserver_port.Text.Trim(); if (string.IsNullOrEmpty(input) || !int.TryParse(input, out int port)) { Toast.Warn("端口号格式不正确"); return; } if (port < 0 || port <= 1024) { Toast.Warn("端口号应大于0且不小于1024"); return; } try { if (HttpServer == null || HttpServer.SocketChannel.Open == false) { HttpServer = new HttpServer.HttpServer() { Port = port }; HttpServer.SocketChannel = await HttpServer.StartAsync(); HttpServerLog("HTTP服务器启动成功"); } } catch (Exception ex) { HttpServerLog("HTTP服务器启动失败 失败原因: {0}", ex.Message); } }