From e5f38584142a2331ed5752ba73ef57850f45444b Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt <nblumhardt@nblumhardt.com> Date: Fri, 20 Nov 2015 21:50:12 +1000 Subject: [PATCH] Don't resume the PortableTimer background task on the captured context that initiated it. --- src/Serilog/Sinks/PeriodicBatching/PortableTimer.cs | 6 +++--- .../PeriodicBatching/PeriodicBatchingSinkTests.cs | 12 +++--------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/Serilog/Sinks/PeriodicBatching/PortableTimer.cs b/src/Serilog/Sinks/PeriodicBatching/PortableTimer.cs index f54de2e75..d661a70c1 100644 --- a/src/Serilog/Sinks/PeriodicBatching/PortableTimer.cs +++ b/src/Serilog/Sinks/PeriodicBatching/PortableTimer.cs @@ -64,7 +64,7 @@ public async void Start(TimeSpan interval) try { - await Task.Delay(interval, _cancel.Token); + await Task.Delay(interval, _cancel.Token).ConfigureAwait(false); _state = PortableTimerState.Active; @@ -90,8 +90,6 @@ public void Dispose() while (true) { - // Thread.Sleep() would be handy here... - lock (_stateLock) { if (_state == PortableTimerState.Disposed || @@ -101,6 +99,8 @@ public void Dispose() return; } } + + Thread.Sleep(10); } } } diff --git a/test/Serilog.Tests/Sinks/PeriodicBatching/PeriodicBatchingSinkTests.cs b/test/Serilog.Tests/Sinks/PeriodicBatching/PeriodicBatchingSinkTests.cs index 9ee9b9d86..1fbb6bc64 100644 --- a/test/Serilog.Tests/Sinks/PeriodicBatching/PeriodicBatchingSinkTests.cs +++ b/test/Serilog.Tests/Sinks/PeriodicBatching/PeriodicBatchingSinkTests.cs @@ -82,15 +82,9 @@ public void WhenAnEventIsEnqueuedItIsWrittenToABatch_OnFlush() public void WhenAnEventIsEnqueuedItIsWrittenToABatch_OnTimer() { var pbs = new InMemoryPeriodicBatchingSink(2, TinyWait, TimeSpan.Zero); - Task.Run(() => - { - Console.WriteLine("TEST: Writing"); - var evt = Some.InformationEvent(); - pbs.Emit(evt); - }); - Console.WriteLine("TEST: Sleeping"); - Thread.Sleep(TimeSpan.FromSeconds(1)); - Console.WriteLine("TEST: Stopping"); + var evt = Some.InformationEvent(); + pbs.Emit(evt); + Thread.Sleep(TinyWait + TinyWait); pbs.Stop(); Assert.Equal(1, pbs.Batches.Count); Assert.False(pbs.WasCalledAfterDisposal);