Mon application ASP.NET (3.5) permet aux users d'exécuter des requêtes complexes pouvant prendre jusqu'à 4 minutes pour returnner les résultats.
Quand je fais de longues loops de code, je vérifie occasionnellement Response.IsClientConnected()
pour que je puisse terminer la page si l'user ferme son browser ou touche le button stop.
Mais lors de l'interrogation de SQL Server, mon code .NET est bloqué lors de l'appel de GetDataReader()
.
Existe-t-il un moyen simple de faire GetDataReader () de façon asynchronous pour que je puisse attendre, mais vérifier, par exemple, toutes les 5-10 secondes pour voir si l'user est toujours connecté, et renflouer la database s'il est parti?
Ou y a-t-il une autre alternative à laquelle je ne pense pas?
vous pouvez utiliser BeginExecuteReader de sqlcommand pour get un exemple asynchronous sqlreader
pas sûr à 100% si c'est ce dont vous avez besoin?
lien montrant annuler
Je suggère de créer un object qui a des methods Start()
et Wait()
encapsulant votre requête. En interne, utilisez ManualResetEvent
pour attendre la fin de la requête. Vous utiliserez la fonction Set()
lorsque la requête est terminée et la WaitOne()
ou WaitOne(TimeSpan ts)
pour l'attendre dans votre méthode Wait()
.