C'est dangereux parce que tout peut prendre de verrouillage de sorte qu'il est difficile, voire impossible, pour éviter une situation de blocage.
Il y avait un article sur ce ("Ne pas Verrouiller les Objets de Type!" un Dr GUI de l'article) avec quelques commentaires de Rico Mariani. Apparemment, l'article n'est plus disponible, mais il existe des "miroirs" flottant autour, y compris au http://bytes.com/topic/c-sharp/answers/249277-dont-lock-type-objects.
En voici un extrait:
Le problème fondamental ici est que vous ne possédez pas le type de l'objet, et vous ne savez pas qui d'autre pourrait y accéder. En général, c'est une très mauvaise idée de s'appuyer sur le verrouillage d'un objet que vous n'avez pas créer et ne sais pas qui d'autre peut accéder. Faire invite impasse. Le moyen le plus sûr est de ne verrouiller des objets privés.
Mais attendez, c'est encore pire que tout cela. Comme il s'avère, les objets sont parfois partagés entre les domaines d'application (mais pas à travers des processus) dans les versions actuelles de la .NET runtime. (Ce n'est généralement pas un problème puisque ils sont immuables.) Cela signifie qu'il est possible pour une AUTRE APPLICATION en cours d'exécution, même dans un domaine d'application différent (mais dans le même processus) de blocage de votre demande par l'obtention d'un verrou sur un type d'objet que vous souhaitez bloquer et de ne jamais le relâcher. Et il serait facile d'obtenir l'accès à ce type d'objet, parce que l'objet a un nom-le nom complet du type! Rappelez-vous que le verrouillage/SyncLock blocs (c'est un mot poli pour se bloque) jusqu'à ce qu'il peut obtenir un verrou. C'est évidemment très mauvais de s'appuyer sur un verrou qu'un autre programme ou un composant peut verrouiller et vous amener à une impasse.