2010-07-27 5 views
1

Nous savons que la classe TransactionScope peut utiliser une valeur de délai d'attente définie par l'utilisateur. Mais une exception de délai d'expiration est levée en quittant le bloc using {}. Comment lancer cette timeoutexception immédiatement après la valeur du délai écoulé?TransactionScope et Timeout Problème

Répondre

2

Ceci n'est pas possible. Le TransactionScope stocke simplement l'heure à laquelle vous avez commencé la transaction, puis vérifie cette heure lors de la validation de la transaction.


Il n'a aucun moyen de lancer une exception à tout point arbitraire.

En général, la seule exception qui peut être levée à tout point en cours d'exécution (du code managé) est ThreadAbortException. Par conséquent, si vous le souhaitez vraiment, vous pouvez créer un thread séparé qui dort pendant la durée du délai, puis annule votre thread d'origine.
Cependant, c'est une idée horrible.

+0

Pourquoi votre solution est-elle horrible? ça a l'air tellement bien. J'ai mis en place et ça marche très bien. Merci beaucoup. – mkus

+0

Les interruptions de threads peuvent interrompre le code n'importe où et gâcher l'état partagé. – SLaks

+0

http://www.interact-sw.co.uk/iangblog/2004/11/12/cancellation – SLaks