Я работаю с внешней библиотекой, которая ожидает от меня создания растровых изображений, когда она вызывает GetImage
для следующего интерфейса, который она предоставляет:
public interface IImageProvider
{
Bitmap GetImage(string imageId);
}
Библиотека запрашивает их навалом - т.е. она вызывает GetImage()
неоднократно в потоке пользовательского интерфейса, создавая существенную задержку пользовательского интерфейса. Теперь у меня есть время для предварительного рендеринга изображений для каждого из этих идентификаторов, прежде чем библиотека фактически запросит их. Я хотел бы сделать это в фоновом потоке, но я явно не в состоянии вернуть Task<Bitmap>
обратно через интерфейс.
То, что я по сути пытаюсь достичь, резюмировано ниже: Я создаю библиотеку - MySvgLibrary
:
public interface MySvgLibrary
{
void Preload();
Dictionary<string, Bitmap> Library { get; }
}
Теперь я хочу Task.Run(() => _myLibrary.Preload() }
. Учитывая, что я не думаю, что могу использовать async / await здесь (так как я не могу вернуть Task<Bitmap>
, я не вижу, как я могу использовать, скажем, TaskCompletionSource
в этом контексте. Откуда я знаю, что Preload
закончен? Я имею в виду, я мог бы проверить, если Library
равно null
, и вращаться, пока не получится (и это работает, кстати), но такой подход вызывает у меня тошноту. Предложения?