I can see the callbacks omission, but if we're not honoring the return value, we're drifting further away from the idea of being able to swap out one downloader for another. The original intention of these downloaders was a constant API with multiple implementations, but skipping the return value means we're already having multiple APIs.

Ping me when you get a chance to talk about this. I know the memory is a concern and want to talk out options. Maybe it's that we don't need the return value at all and just push people for the event callbacks; use the data and discard it instead of expecting the downloader to keep everything around. But with only our second downloader, I don't want to already break the design of a single API.