 	/// The file descriptor for writing data.
 	let writeFD: Int32
 
+	/// A GCD queue upon which to deliver I/O callbacks.
+	let queue: dispatch_queue_t
+
 	/// Creates an NSFileHandle corresponding to the `readFD`. The file handle
 	/// will not automatically close the descriptor.
 	var readHandle: NSFileHandle {

				}

				return
					combineLatest(
						stdoutProducer,
						stderrProducer,
						terminationStatusProducer |> promoteErrors(ReactiveTaskError.self)

		var stdinProducer: SignalProducer<(), ReactiveTaskError> = .empty

		if let input = taskDescription.standardInput {
			switch Pipe.create(queue) {
			case let .Success(pipe):
				task.standardInput = pipe.value.readHandle

				stdinProducer = pipe.value.writeDataFromProducer(input) |> on(started: {
					close(pipe.value.readFD)
				})

			case let .Failure(error):
				sendError(observer, error.value)
			}
		}

		SignalProducer(result: Pipe.create(queue))
			|> zipWith(SignalProducer(result: Pipe.create(queue)))
			|> flatMap(.Merge) { stdoutPipe, stderrPipe -> SignalProducer<NSData, ReactiveTaskError> in
				let stdoutProducer = aggregateDataReadFromPipe(stdoutPipe, standardOutput, scheduler)
				let stderrProducer = aggregateDataReadFromPipe(stderrPipe, standardError, scheduler)

				let terminationStatusProducer = SignalProducer<Int32, NoError> { observer, disposable in
					task.terminationHandler = { task in
