2010-08-14 2 views
1

Мне нужно, чтобы проверить мой энергично испытанный код работает, когда вызывается многими нитямиТестирование кода нитками в .NET

Так я называю код в цикле в TestMethod с помощью TreadPool.QueueUserWorkItem

однако Кажется, что все равно не удерживается текущий поток, пока все потоки не запускаются.

т.е. притвориться код ....

использованием 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 

Без ждать моего модульного тестирования избавляется от сервера до окончания работы.

Любые идеи с благодарностью получены ...?

+0

Вы ищете какой-то подсчет ссылок для «серверного» объекта? – wj32

+0

Может, спасибо за предложение –

ответ

0

Главная цель вашей цели - , чтобы дождаться окончания всех остальных потоков, прежде чем удалять сервер?

Если это так, вы должны взглянуть на очень подробный ответ, который я получил по аналогичному вопросу, который я задал некоторое время назад. В ответ включены многие различные подходы, которые вы должны учитывать.

The answer that was given is located here.

Надеюсь, что это поможет!

+0

да, просто сказать thread.Join не работает в тестовой среде - не знаю почему. Во всяком случае, я буду хорошо читать по ссылке, которую вы отправили завтра (очень поздно, здесь закрываются глаза, а жена храпит) - спасибо за быстрый ответ –

+0

Из этого ответа я буду использовать Join - спасибо за указатель –

0

Я не знаю много о .NET, но в Java я хотел бы сделать это

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 

этак MainThread будет постоянно петля, сон, петля, сон, пока все нити не выполняются, то он будет распоряжаться сервером.

0

Join() является самым простым. Если вы не можете этого сделать, вы можете создать событие для каждого потока и дождаться, когда событие будет подписано. Кроме того, вы можете создать семафор с начальным счетчиком для каждого потока и ждать, пока все потоки освободят семафор.

+0

join not работайте в тесте, если ваша отладка тогда не прекратится, а его тонкий –

+0

Join действительно работает, что-то бросает ошибку во время теста, который не срабатывает при отладке. –

Смежные вопросы