2010-08-14 3 views
1

je dois tester mon code vigoureusement testé fonctionne lorsqu'il est appelé par de nombreux filstester le code avec des fils dans .NET

Je fais appel le code dans une boucle dans un TestMethod utilisant TreadPool.QueueUserWorkItem

mais il ne semble pas être de toute façon de tenir le fil en cours pendant que tous les fils lancés sont toujours en cours d'exécution.

à savoir faire semblant de code ....

utilisant Microsoft.VisualStudio.TestTools.UnitTesting

10 create a server 

20 for(a number of iterations) start a thread running a function 

30 while all the threads are still doing stuff hang on to the server 

40 now dispose of the server 

Sans attendre mon test unitaire est mise au rebut du serveur avant que le travail est fait.

Des idées reçues avec reconnaissance ...?

+0

Cherchez-vous une sorte de comptage de référence pour l'objet "serveur"? – wj32

+0

Pourrait faire, merci pour la suggestion –

Répondre

0

Votre objectif pour le thread principal est-il d'attendre que tous les autres threads soient terminés avant de disposer du serveur??

Si c'est le cas, vous devriez jeter un coup d'œil à une réponse très détaillée J'ai eu une question similaire à celle que j'ai posée il y a quelque temps. De nombreuses approches différentes que vous devriez considérer sont incluses dans la réponse.

The answer that was given is located here.

Espérons que ça aide!

+0

oui, juste pour dire thread.Join ne fonctionne pas dans le cadre de test - aucune idée pourquoi. De toute façon, je vais avoir une bonne lecture sur le lien que vous avez envoyé demain (très tard ici les yeux fermant et femme ronfler) - merci pour la réponse rapide –

+0

De cette réponse, je vais utiliser Join - merci pour le pointeur –

0

Je ne sais pas beaucoup sur .NET, mais en java je ferais ce

10 create a server 

20 for(a number of iterations) start a thread running a function 

30 while(all the threads are still doing stuff){ 
    MainThread.Sleep(xMiliseconds) 
} 

40 now dispose of the server 

De cette façon, la boucle MainThread sera sans cesse, le sommeil, la boucle, le sommeil, jusqu'à ce que tous les fils sont faites, puis il disposera du serveur.

0

Join() est le plus simple. Si vous ne pouvez pas le faire, vous pouvez créer un événement pour chaque thread et attendre que l'événement soit marqué. Vous pouvez également créer un sémaphore avec un nombre initial pour chaque thread et attendre que tous les threads libèrent le sémaphore.

+0

travailler dans un test, à moins que votre débogage puis son amende –

+0

Join fonctionne après tout, quelque chose jette une erreur lors du test qui ne le fait pas dans le débogage .. –

Questions connexes