             repeats: false
         )
 
-        RunLoop.main.add(completionDelayTimer!, forMode: .commonModes)
-        RunLoop.main.add(completionDelayTimer!, forMode: .UITrackingRunLoopMode)
+        DispatchQueue.main.async {
+            RunLoop.main.add(timer, forMode: .commonModes)
+            RunLoop.main.add(timer, forMode: .UITrackingRunLoopMode)
+        }
+
+        completionDelayTimer = timer
     }
 
     @objc private func startDelayTimerFired() {

            repeats: false
        )

        RunLoop.main.add(startDelayTimer!, forMode: .commonModes)
        RunLoop.main.add(startDelayTimer!, forMode: .UITrackingRunLoopMode)
    }

    private func scheduleCompletionDelayTimer() {
        completionDelayTimer = Timer(
            timeInterval: completionDelay,
            target: self,
            selector: #selector(NetworkActivityIndicatorManager.completionDelayTimerFired),

    // MARK: - Private - Timers

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