Это, безусловно, звучит как хорошее применение для фонового потока. Кроме того, поскольку ваша единица работы достаточно велика, не должно быть слишком много конфликтов для синхронизации ваших коллекций. Вы можете найти примеры подобных алгоритмов, но я думаю, что вам придется развернуть собственную реализацию - это не так сложно.
Однако на ум приходит одна вещь: вам придется либо вести учет того, какие изображения в данный момент загружаются, либо допускать множественные загрузки одного и того же изображения.
Например, если ваш пользовательский интерфейс требует изображение, которое еще не было загружено, вы, вероятно, захотите загрузить это изображение в качестве приоритета. Если вы знаете, что фоновая нить находится в процессе загрузки этого изображения, вы можете просто подождать, пока оно станет доступным. Если вместо этого вы решите просто выполнить загрузку в потоке пользовательского интерфейса, есть вероятность, что фоновый поток попытается добавить уже загруженное изображение.
Итак, должна быть некоторая синхронизация, но она не должна быть слишком сложной.
Ник