Partager via


CA2003 : Ne traitez pas les fibres comme des threads

Élément Valeur
ID de la règle CA2003
Category Microsoft.Reliability
Modification avec rupture Sans rupture

Cause

Un thread managé est traité comme un thread Win32.

Remarque

Cette règle est déconseillée. Pour plus d’informations, consultez Règles dépréciées.

Description de la règle

Ne partez pas du principe qu’un thread managé est un thread Win32 : il s’agit d’une fibre. Le Common Language Runtime (CLR) exécute les threads managés comme des fibres dans le contexte de threads réels appartenant à SQL. Ces threads peuvent être partagés entre AppDomain et même entre bases de données dans le processus SQL Server. Le stockage local de thread managés fonctionne, mais vous ne pourrez peut-être pas utiliser le stockage local de thread non managé ni supposer que votre code se réexécutera sur le thread du système d’exploitation actuel. Ne modifiez pas de paramètres comme les paramètres régionaux du thread. N’appelez pas CreateCriticalSection ni CreateMutex par un appel de code non managé, car ils exigent que le thread verrouillé soit aussi déverrouillé. Étant donné que le thread verrouillé ne se déverrouille pas lorsque vous utilisez des fibres, les sections critiques Win32 et les mutex sont inutiles dans SQL. Vous pouvez utiliser sans risque la plupart des éléments d’état sur un objet Thread managé, notamment le stockage local de thread managé et la culture actuelle de l’interface utilisateur du thread. Pour des raisons de modèle de programmation toutefois, il n’est pas possible de modifier la culture actuelle d’un thread avec SQL. Cette limitation sera appliquée par le biais d’une nouvelle autorisation.

Comment corriger les violations

Examinez votre utilisation des threads et modifiez votre code en conséquence.

Quand supprimer les avertissements

Ne supprimez pas cette règle.