'A variant of the imap() method which returns an ApplyResult
object that provides an iterator (next method(timeout)
available).
If callback is specified then it should be a callable which
accepts a single argument. When the resulting iterator becomes
ready, callback is applied to it (unless the call
failed). callback should complete immediately since otherwise
the thread which handles the results will get blocked.'

def imap_async(self, func, iterable, chunksize=None, callback=None):

    apply_result = ApplyResult(callback=callback)
    collector = OrderedResultCollector(apply_result, as_iterator=True)
    self._create_sequences(func, iterable, chunksize, collector)
    return apply_result
