2009-05-23 6 views
2

J'ai une méthode qui, pour des raisons de sécurité du thread, ne doit jamais être utilisée que par un thread particulier. Si un autre thread essaie de l'utiliser, j'aimerais qu'une exception soit lancée.Comment limiter une méthode à un thread particulier?

public void UnsafeMethod() 
{ 
    if (CurrentThreadId != this.initialThreadId) 
     throw new SomeException("Can only be run on the special thread."); 
    // continue ... 
} 

Comment puis-je trouver le CurrentThreadId dans le code ci-dessus? Ou alternativement existe-t-il un autre moyen de réaliser ce que je veux faire?

Répondre

5

Fil. CurrentThread. ManagedThreadId

Ou vous pouvez simplement stocker une référence à l'objet de thread lui-même et le comparer à Thread.CurrentThread.

+0

Merci beaucoup. Je n'ai pas vu CurrentThread. Je dois devenir aveugle. –

0

Je suppose que vous avez besoin de quelque chose dans le style d'une variable statique (une variable globale déguisée) pour le faire. Cela ne me semble pas très bien, mais mettre cette méthode dans un objet singleton vous le permettrait.

4

Nommez votre fil au moment de la création

System.Threading.Thread thread = new System.Threading.Thread(..); 
thread.Name = "MySpecialThread"; 

Et vérifier cet état où vous voulez fil code spécifique:

if (System.Threading.Thread.CurrentThread.Name == "MySpecialThread") 
{ 
    //.. 
} 
+0

Excellente idée. La bonne chose est que vous n'avez pas à stocker l'identifiant de thread n'importe où. Malheureusement, bien que je puisse avoir plus d'un de ces threads, je devrais générer des noms uniques pour eux (plutôt que d'utiliser simplement une constante, s'il n'y avait qu'un seul thread), ce qui rendrait les choses un peu moins claires. –

Questions connexes