         //same with async
         self._wake = try! Async(loop: _loop) { _ in
             sema.wait()
-            personalQueue.content.appendContentsOf(commonQueue.content)
-            commonQueue.content.removeAll()
             defer {
                 sema.signal()
             }
+            personalQueue.content.appendContentsOf(commonQueue.content)
+            commonQueue.content.removeAll()
         }
     }
     

    }
    
    public func execute(task:SafeTask) {
        if RunLoop.current.isEqualTo(self) {
            //here we are safe to be lock-less
            _personalQueue.content.append(task)
        } else {
            do {
                _semaphore.wait()
                _commonQueue.content.append(task)
                defer {
                    _semaphore.signal()
                }
            }
            _wake.send()
        }
    }
    

    private let _caller:Prepare
    private let _semaphore:SemaphoreType
    
    private var _appartment:Thread? = nil
    
    private (set) public static var main:RunLoopType = UVRunLoop(loop: Loop.defaultLoop())
    
    private init(loop:Loop) {
