def gather_all_unsorted(threadpool, func, params, *args, **kwargs):
    """ Runs multiple tasks concurrently and returns all results in the order
		of execution finish as soon as possible.
	"""
    for i, param in enumerate(params):
        threadpool.add_task(i, func, param, *args, **kwargs)
    for i in range(len(params)):
        yield threadpool.get()
