'A variant of the imap_unordered() 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_unordered_async(self, func, iterable, chunksize=None, callback=None):

    apply_result = ApplyResult(callback=callback)
    collector = UnorderedResultCollector(apply_result)
    self._create_sequences(func, iterable, chunksize, collector)
    return apply_result
