 extension Task {
     
     public func didFinish(callbackQueue: NSOperationQueue? = NSOperationQueue.mainQueue(), closure: (V!, ErrorType?) -> Void) -> Self {
+        let queue = callbackQueue ?? NSOperationQueue.currentQueue()
+
         self.addDeferredClosure {
-            if let callbackQueue = callbackQueue {
-                callbackQueue.addOperationWithBlock {
+            if let queue = queue {
+                queue.addOperationWithBlock {
                     closure(self.value, self.error)
                 }
             }

extension NonFailableTask {
    
    public func didFinish(callbackQueue: NSOperationQueue? = NSOperationQueue.mainQueue(), closure: (V) -> Void) -> Self {
        self.addDeferredClosure {
            if let callbackQueue = callbackQueue {
                callbackQueue.addOperationWithBlock {
                    closure(self.value)
                }
            }

            withUnsafeMutablePointer(&self.spinlock, OSSpinLockUnlock)
            
            //
            if let deferredClosures = self.deferredClosures {
                deferredClosures.forEach { $0() }
                self.deferredClosures = nil
            }
        }
        
        // assert(self.value == nil && self.error == nil, "value or error can be assigned only once.")
