Le conducteur principal de cette fonctionnalité a été à l'appui de Serveurs SQL exigences strictes pour l'intégration de la CLR dans SQL Server 2005. Probablement afin que d'autres puissent l'utiliser et probablement pour des raisons juridiques, cette intégration en profondeur a été publié comme une API d'hébergement, mais les exigences techniques ont été les Serveurs SQL. Rappelez-vous que dans SQL Server, MTBF est mesurée en mois, pas en heures et le processus de redémarrage en raison d'une exception non gérée s'est passé est totalement inacceptable.
Cet article MSDN Magazine est probablement le meilleur que j'ai vu de la description des spécifications techniques de la contrainte de l'environnement d'exécution a été construit pour les.
Le ReliabilityContract est utilisé pour décorer vos méthodes pour indiquer la façon dont ils fonctionnent dans des conditions potentiellement asynchrone exceptions (ThreadAbortException, OutOfMemoryException, StackOverflowException). Une exécution limitées région est définie comme une prise ou enfin (ou à défaut) de la section d'un bloc try qui est immédiatement précédé par un appel Système.Moment de l'exécution.CompilerServices.RuntimeServices.PrepareConstrainedRegions().
System.Runtime.CompilerServices.RuntimeServices.PrepareConstrainedRegions();
try
{
// this is not constrained
}
catch (Exception e)
{
// this IS a CER
}
finally
{
// this IS ALSO a CER
}
Lorsqu'un ReliabilityContract méthode est utilisée à partir d'un CER, il y a 2 choses qui peuvent se produire à elle. La méthode sera pré-préparé par l'équipe afin de ne pas invoquer le compilateur JIT la première fois qu'il est exécuté, ce qui pourrait essayer d'utiliser la mémoire elle-même et cause ses propres exceptions. Aussi tandis qu'à l'intérieur d'un CER l'exécution des promesses de ne pas jeter un ThreadAbort exception et à attendre pour lancer l'exception jusqu'à ce que après le CER a terminé.
Donc, pour revenir à votre question, je suis encore à essayer de venir avec un simple exemple de code qui permettra de répondre directement à votre question. Comme vous l'avez déjà deviné cependant, l'échantillon le plus simple est d'aller demander beaucoup de code donné la nature asynchrone du problème et sera probablement SQLCLR code parce que c'est l'environnement qui va utiliser CERs pour le plus grand bénéfice.