                 try await(task)
                 
                 if let didFinishWithValueClosure = self.didFinishWithValueClosure {
-                    callbackQueue.addOperationWithBlock {
+                    dispatchToCallbackQueue {
                         didFinishWithValueClosure(task.value)
                     }
                 }

            catch let error {
                if error.userCancelled {
                    if let didCancelClosure = self.didCancelClosure {
                        callbackQueue.addOperationWithBlock {
                            didCancelClosure()
                        }
                    }
                }
                else {
                    if let didFinishWithErrorClosure = self.didFinishWithErrorClosure {
                        callbackQueue.addOperationWithBlock {
                            didFinishWithErrorClosure(error)
                        }
                    }

    
}

private let _mainOperationQueue = NSOperationQueue.mainQueue()
private let _dispatch_main_queue = dispatch_get_main_queue()
private let _dispatch_serial_queue = dispatch_queue_create(nil, DISPATCH_QUEUE_SERIAL)

public final class TaskAwaiter<V> {
    
    public let task: Task<V>
