diff --git a/fsl/utils/idle.py b/fsl/utils/idle.py
index afa6247aeb667fe41d75bbde57376fee31c500d3..d2c93aeb08e0928df4e0dcceb84adf32dc98550f 100644
--- a/fsl/utils/idle.py
+++ b/fsl/utils/idle.py
@@ -79,6 +79,7 @@ import atexit
 import logging
 import functools
 import threading
+from   contextlib  import contextmanager
 from   collections import abc
 
 try:                import queue
@@ -225,15 +226,31 @@ class IdleLoop(object):
     @property
     def neverQueue(self):
         """If ``True``, tasks passed to :meth:`idle` will never be queued, and
-        instead will always be executed directly/synchonously.
+        instead will always be executed directly/synchonously. See also the
+        :meth:`synchronous` context manager.
         """
         return self.__neverQueue
 
 
     @neverQueue.setter
-    def neverQueue(self, allow):
+    def neverQueue(self, val):
         """Update the ``neverQueue`` flag. """
-        self.__neverQueue = allow
+        self.__neverQueue = val
+
+
+    @contextmanager
+    def synchronous(self):
+        """Context manager which can be used to tenporarily set :meth:`neverQueue` to
+        ``True``, restoring its previous value afterwards.
+        """
+
+        oldval = self.__neverQueue
+        self.__neverQueue = True
+
+        try:
+            yield
+        finally:
+            self.__neverQueue = oldval
 
 
     def reset(self):