     
     private let _loop:Loop
     private let _wake:Async
+    private let _caller:Prepare
     private let _semaphore:SemaphoreType
     
     init() {

                sema.signal()
            }
        }
    }
    
    public func semaphore() -> SemaphoreType {

        defer {
            timer.close()
        }
        while until.timeIntervalSinceNow >= 0 {
            _loop.run(mode)
            if once {
                break
