diff --git a/v2rayN/ServiceLib/Services/SpeedtestService.cs b/v2rayN/ServiceLib/Services/SpeedtestService.cs index 50389f61..00f54427 100644 --- a/v2rayN/ServiceLib/Services/SpeedtestService.cs +++ b/v2rayN/ServiceLib/Services/SpeedtestService.cs @@ -19,7 +19,7 @@ public class SpeedtestService(Config config, Func updateF public void ExitLoop() { - if (_lstExitLoop.Count > 0) + if (!_lstExitLoop.IsEmpty) { _ = UpdateFunc("", ResUI.SpeedtestingStop); @@ -27,6 +27,11 @@ public class SpeedtestService(Config config, Func updateF } } + private static bool ShouldStopTest(string exitLoopKey) + { + return !_lstExitLoop.Any(p => p == exitLoopKey); + } + private async Task RunAsync(ESpeedActionType actionType, List selecteds) { var exitLoopKey = Utils.GetGuid(false); @@ -157,7 +162,7 @@ public class SpeedtestService(Config config, Func updateF var pageSizeNext = pageSize / 2; if (lstFailed.Count > 0 && pageSizeNext > 0) { - if (_lstExitLoop.Any(p => p == exitLoopKey) == false) + if (ShouldStopTest(exitLoopKey)) { await UpdateFunc("", ResUI.SpeedtestingSkip); return; @@ -195,6 +200,12 @@ public class SpeedtestService(Config config, Func updateF { continue; } + + if (ShouldStopTest(exitLoopKey)) + { + return false; + } + tasks.Add(Task.Run(async () => { await DoRealPing(it); @@ -223,7 +234,7 @@ public class SpeedtestService(Config config, Func updateF List tasks = new(); foreach (var it in selecteds) { - if (_lstExitLoop.Any(p => p == exitLoopKey) == false) + if (ShouldStopTest(exitLoopKey)) { await UpdateFunc(it.IndexId, "", ResUI.SpeedtestingSkip); continue; @@ -239,21 +250,27 @@ public class SpeedtestService(Config config, Func updateF if (processService is null) { await UpdateFunc(it.IndexId, "", ResUI.FailedToRunCore); + return; } - else + + await Task.Delay(1000); + + var delay = await DoRealPing(it); + if (blSpeedTest) { - await Task.Delay(1000); - var delay = await DoRealPing(it); - if (blSpeedTest) + if (ShouldStopTest(exitLoopKey)) { - if (delay > 0) - { - await DoSpeedTest(downloadHandle, it); - } - else - { - await UpdateFunc(it.IndexId, "", ResUI.SpeedtestingSkip); - } + await UpdateFunc(it.IndexId, "", ResUI.SpeedtestingSkip); + return; + } + + if (delay > 0) + { + await DoSpeedTest(downloadHandle, it); + } + else + { + await UpdateFunc(it.IndexId, "", ResUI.SpeedtestingSkip); } } }