             dispatch_semaphore_wait(self.sem, DISPATCH_TIME_FOREVER)
             defer { dispatch_semaphore_signal(self.sem) }
         }
-        return self._result
+        return self._result!
     }
 }
 

    /// Run `block` after `self` is completed with specific queue.
    public final func then<R>(queue: dispatch_queue_t, _ block: (Result) -> R) -> SDTask<R> {
        return _lck.synchronized {
            if _result != nil {
                return SDTask<R>(queue: queue) { block(self.result) }
            }
            let task = SDTask<R>(queue)
            _notify.append { task.submit { block(self.result) } }
            return task
        }
    }


extension SDTask {
    
    /// Suspend if `result` satisfies `predicate`.
    public final func suspend(predicate: (Result) -> Bool) -> SDTask<Result> {
        return self.suspend(queue, predicate)
