Tout d'abord, je pense que je devrais faire un lien vers cet article ce qui accomplit à peu près ce que je veux.
Voici mon problème : J'ai un contrôle utilisateur sur mon site qui a besoin de mettre en cache certaines données pendant au moins 15 minutes, puis de les extraire à nouveau de la base de données. Le problème est que l'extraction prend environ 7-10 secondes pour extraire le résultat de la base de données.
Je pense que je peux fixer la durée du cache à deux heures, puis avoir une propriété dans l'objet mis en cache pour indiquer quand l'objet a été chargé (appelons cela la propriété LoadDate). Le code pourrait alors extraire l'objet mis en cache.
- S'il est nul, je n'ai pas d'autre choix que d'extraire les données de manière synchrone et de charger ensuite mon contrôle utilisateur.
- S'il n'est pas nul, je veux aller de l'avant et charger les données sur mon contrôle utilisateur à partir de l'objet mis en cache. Je vérifierais ensuite la propriété LoadDate. Si cela fait 15 minutes ou plus, il faut mettre en place un processus asynchrone pour recharger le cache.
- Il doit y avoir un processus pour verrouiller l'objet de cache pendant la mise à jour.
- J'ai besoin d'une instruction if qui dise que si l'objet est verrouillé, il faut oublier de le mettre à jour. Cela s'appliquerait aux chargements de pages ultérieurs par d'autres utilisateurs, car le premier utilisateur mettrait déjà à jour le cache et je ne veux pas mettre à jour le cache encore et encore ; il devrait juste être mis à jour par le premier appel. N'oubliez pas que je charge déjà mon contrôle utilisateur avant même de procéder à la vérification du cache.
Dans l'article dont j'ai donné le lien précédemment, la réponse configure parfaitement la mise à jour du cache, mais je ne crois pas qu'elle soit asynchrone. La question commençait par le faire de manière asynchrone en utilisant Page.RegisterAsyncTask. [Question 1] Je n'arrive pas à trouver d'informations sur le fait que cela permettrait à un processus asynchrone de continuer même si l'utilisateur a quitté la page ?
[Question 2] Quelqu'un a-t-il une bonne idée de la façon de procéder ? J'ai un peu de code, mais il est devenu extrêmement long et ne semble toujours pas fonctionner correctement.