2009-10-20 12 views
1

Nous pouvons être habitué au code ci-dessous:Sécurité du thread/processus pour la ressource non gérée

if(File.Exists(xxx)) 
{ 
    //I am here 
    using(var streamReader = new StreamReader("xxx")) 
    { 
    ... 
    } 
} 

Eh bien, le problème potentiel est que, le fichier xxx peut être supprimé par un autre thread (ou processus) lorsque le cours de code "//Je suis là". Ainsi, le bloc utilisant lancera une exception.

De toute façon pour éviter cela? (Je ne veux pas avoir une mauvaise utilisation d'essayer.) Tout modèle ou pratique courante pour résoudre ce genre de problème de «thread/processus de sécurité» pour une ressource non gérée?

Merci,

Répondre

2

Utilisez un essai/catch. Ils sont plus jolis qu'ils en ont l'air.

Si vous contrôlez toutes les applications qui accèdent au dossier, vous pouvez utiliser un mutex nommé (un sémaphore inter-domaine). Si c'est un dossier généralement accessible, le problème n'est pas vraiment évitable.

1

Bien sûr, vous pouvez utiliser des mutex à l'échelle du système pour introduire la synchronisation sur les ressources système. Mais c'est un peu exagéré ici et de toute façon vous ne pouvez pas empêcher d'autres applications/processus qui ne se soucient pas de ces mutexes de supprimer le fichier.

Donc je vous recommande plutôt d'utiliser try/catch sur StreamReader.

Questions connexes