From e77f5a885172c902e1ada7b4cc36240652df9ded Mon Sep 17 00:00:00 2001 From: SilverFox Date: Sun, 16 May 2021 19:36:03 +0800 Subject: [PATCH] Avoid use Task.Delay().Wait() use method with no HANDLE alloc, fix #37 --- src/DotNetty.Common/Concurrency/XThread.cs | 11 ++++++++++- src/DotNetty.Common/Utilities/HashedWheelTimer.cs | 6 ++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/DotNetty.Common/Concurrency/XThread.cs b/src/DotNetty.Common/Concurrency/XThread.cs index c8d61af8..b0ed8a9d 100644 --- a/src/DotNetty.Common/Concurrency/XThread.cs +++ b/src/DotNetty.Common/Concurrency/XThread.cs @@ -121,7 +121,16 @@ public void Start(object parameter) public static void Sleep(int millisecondsTimeout) { - Task.Delay(millisecondsTimeout).Wait(); + Thread.Sleep(millisecondsTimeout); + } + + /// was canceled. + public static void Sleep(int millisecondsTimeout, CancellationToken cancellationToken) + { + using (var ev = new ManualResetEventSlim()) + { + ev.Wait(millisecondsTimeout, cancellationToken); + } } public int Id => _threadId; diff --git a/src/DotNetty.Common/Utilities/HashedWheelTimer.cs b/src/DotNetty.Common/Utilities/HashedWheelTimer.cs index 72f023d9..777cce22 100644 --- a/src/DotNetty.Common/Utilities/HashedWheelTimer.cs +++ b/src/DotNetty.Common/Utilities/HashedWheelTimer.cs @@ -423,15 +423,13 @@ TimeSpan WaitForNextTick() : currentTime; } - Task delay = null; try { long sleepTimeMs = sleepTime.Ticks / TimeSpan.TicksPerMillisecond; // we've already rounded so no worries about the remainder > 0 here Debug.Assert(sleepTimeMs <= int.MaxValue); - delay = Task.Delay((int)sleepTimeMs, _owner.CancellationToken); - delay.Wait(); + XThread.Sleep((int)sleepTimeMs, _owner.CancellationToken); } - catch (AggregateException) when (delay is object && delay.IsCanceled) + catch (OperationCanceledException) { if (Volatile.Read(ref _owner.v_workerState) == WorkerStateShutdown) {