'Start a cooperative task which will read bytes from the input file and
write them to C{consumer}.  Return a L{Deferred} which fires after all
bytes have been written.
@param consumer: Any L{IConsumer} provider'

def startProducing(self, consumer):

    self._task = self._cooperate(self._writeloop(consumer))
    d = self._task.whenDone()
    def maybeStopped(reason):
        reason.trap(task.TaskStopped)
        return defer.Deferred()
    d.addCallbacks((lambda ignored: None), maybeStopped)
    return d
