Fix: High latency in tcping test due to thread blocking

This commit is contained in:
jiuqianyuan 2025-11-23 20:05:57 +08:00
parent 693afe3560
commit 6d15ddc0a4

View file

@ -335,15 +335,14 @@ public class SpeedtestService(Config config, Func<SpeedTestResult, Task> updateF
using Socket clientSocket = new(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
var timer = Stopwatch.StartNew();
var result = clientSocket.BeginConnect(endPoint, null, null);
if (!result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(5)))
{
throw new TimeoutException("connect timeout (5s): " + url);
}
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
await clientSocket.ConnectAsync(endPoint, cts.Token).ConfigureAwait(false);
timer.Stop();
responseTime = (int)timer.Elapsed.TotalMilliseconds;
clientSocket.EndConnect(result);
}
catch (OperationCanceledException)
{
// 超时情况responseTime保持为-1
}
catch (Exception ex)
{