Как настроить Unity таким образом, чтобы класс мог инициализироваться асинхронно, не блокируя загрузку других модулей (только блокируя другие типы, которые явно нуждаются в экземпляре асинхронного типа)? Типы классов, о которых я думаю, - это кэши справочных данных, которые извлекают снимок часто используемых данных из базы данных, и мне нужно закончить предварительное кэширование, прежде чем разрешить доступ к нему любым другим модулям (если запросы заблокированы в моем классе I). быстро задержит основной поток и заблокирует все остальные модули от инициализации). Это становится более важным, поскольку у меня есть несколько таких классов справочных данных
Например, скажем, у меня есть такой класс:
public class ProductCache{
public ProductCache(){}
public Initialize(){
// a very slow DB call to fetch frequently used products
Thread.Sleep(30*1000);
}
public Product FindProduct(string productDescription){
/* check cache, if not there try the db */
}
}
Если я вызову Initialize из конструктора, я заблокирую поток, который его вызывает (из Unity) на 30 секунд, не давая мне возможности создавать другие (аналогичные) классы параллельно. Если я просто помещу задачу в пул потоков, Unity в конечном итоге доберется до точки, где другой класс, которому необходим мой кэш продукта, выполняет свой код инициализации, а затем получает доступ к структурам данных, которые еще не полностью инициализированы (в этом случае это приведет к в промахе кеша и вызове в БД для получения конкретного продукта, а таких запросов может быть много за 30 секунд)
спасибо
Oskar