diff --git a/src/libraries/System.Private.CoreLib/src/System/Threading/SemaphoreSlim.cs b/src/libraries/System.Private.CoreLib/src/System/Threading/SemaphoreSlim.cs index 081e09d95ada0a..d72635362b8488 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Threading/SemaphoreSlim.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Threading/SemaphoreSlim.cs @@ -76,13 +76,7 @@ public class SemaphoreSlim : IDisposable private sealed class TaskNode : Task { internal TaskNode Prev, Next; - internal TaskNode() : base() { } - - internal override void ExecuteFromThreadPool(Thread threadPoolThread) - { - bool setSuccessfully = TrySetResult(true); - Debug.Assert(setSuccessfully, "Should have been able to complete task"); - } + internal TaskNode() : base((object)null, TaskCreationOptions.RunContinuationsAsynchronously) { } } #endregion @@ -847,7 +841,7 @@ public int Release(int releaseCount) // Get the next async waiter to release and queue it to be completed var waiterTask = m_asyncHead; RemoveAsyncWaiter(waiterTask); // ensures waiterTask.Next/Prev are null - ThreadPool.UnsafeQueueUserWorkItemInternal(waiterTask, preferLocal: true); + waiterTask.TrySetResult(result: true); } } m_currentCount = currentCount;