Comment configurer Unity de manière à ce qu'une classe puisse s'initialiser de manière asynchrone sans bloquer la charge des autres modules (en bloquant uniquement les autres types qui ont explicitement besoin d'une instance du type asynch)? Le type de classes que je pense sont des caches de données de référence qui tirent un instantané des données fréquemment utilisées de la base de données, et j'ai besoin de terminer le précâblage avant de laisser d'autres modules y accéder (si les demandes sont bloquées dans ma classe I tiendra rapidement le thread principal et bloquera tous les autres modules de l'initialisation). Cela devient plus important que j'ai plusieurs telles classes de données de référenceComment configurer Unity pour l'initialisation asynchrone des types/modules
À titre d'exemple, que j'ai une classe comme ceci:
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 */
}
}
Si j'appelle Initialize du constructeur je bloquer le thread qui l'invoque (depuis Unity) pendant 30 secondes, m'empêchant de créer d'autres classes (similaires) en parallèle. Si je place simplement la tâche sur le pool de threads, Unity arrivera au point où une autre classe qui a besoin de mon cache de produit exécute son code d'initialisation, et accède alors aux structures de données qui ne sont pas encore complètement initialisées (dans ce cas dans un défaut de cache et un appel à la db pour aller chercher le produit, et il pourrait y avoir beaucoup de demandes en 30 secondes)
grâce Oskar
pouvez-vous fournir du code, c'est la structure de la classe que vous initialisez? – onof
a ajouté un petit exemple – Oskar