I have a coroutine that should perform a few tasks concurrently:

```
@gen.coroutine
def scrape_trackers(self):
    yield [self.scrape_tracker(tracker) for tracker in self.torrent.trackers]

```

Some trackers will never respond (or maybe respond in an hour), so my code never gets past this method, as Tornado is waiting for *all* of them to complete. How do I wait for only *one* to complete and keep trying the other ones in the background?

Something like:

```
yield WhenAnyComplete(map(self.scrape_tracker, self.torrent.trackers))

```

I was thinking of calling each of those methods with `IOLoop.add_callback()` and doing something when they finish, but I'm not entirely sure where to go from there:

```
for tracker in self.torrent.trackers:
    future = self.scrape_tracker(tracker)
    IOLoop.add_future(future, self.tracker_scraped)

```

Any help is appreciated.