             repeats: false
         )
 
-        RunLoop.main.add(startDelayTimer!, forMode: .commonModes)
-        RunLoop.main.add(startDelayTimer!, forMode: .UITrackingRunLoopMode)
+        DispatchQueue.main.async {
+            RunLoop.main.add(timer, forMode: .commonModes)
+            RunLoop.main.add(timer, forMode: .UITrackingRunLoopMode)
+        }
+
+        startDelayTimer = timer
     }
 
     private func scheduleCompletionDelayTimer() {
-        completionDelayTimer = Timer(
+        let timer = Timer(
             timeInterval: completionDelay,
             target: self,
             selector: #selector(NetworkActivityIndicatorManager.completionDelayTimerFired),

    // MARK: - Private - Timers

    private func scheduleStartDelayTimer() {
        startDelayTimer = Timer(
            timeInterval: startDelay,
            target: self,
            selector: #selector(NetworkActivityIndicatorManager.startDelayTimerFired),

            repeats: false
        )

        DispatchQueue.main.async {
            RunLoop.main.add(timer, forMode: .commonModes)
            RunLoop.main.add(timer, forMode: .UITrackingRunLoopMode)
        }

        completionDelayTimer = timer
    }

    @objc private func startDelayTimerFired() {
