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);