Каков наилучший способ закрыть поток WCF? - PullRequest
2 голосов
/ 20 марта 2009

У меня есть приложение, которое закрывается. Когда я закрываю приложение, оно пытается выделить несколько потоков, которые выполняют сканирование TCP, попытки WCF P2P и т. Д. Проблема заключается в потоке WCF, который останавливается на методе в течение 17 секунд.

IP2PAuthenticationService server;
ChannelFactory<IP2PAuthenticationService> channelFactory;
channelFactory = new ChannelFactory<IP2PAuthenticationService>(binding, endpointAddress);

server = channelFactory.CreateChannel();
string result = server.SendMyDetails(myContract, "foo");

Так что все это происходит внутри потока. Когда форма закрывается, она пытается избавиться от нити

 if (prospectCrawlerThread != null)
 {
      prospectCrawlerThread.Abort();
      //prospectCrawlerThread.Join();
      prospectCrawlerThread = null;
  }

Я подтвердил это, раскомментировав .Join(), а также приостановив отладку и увидев потоки, которые все еще работают.

Какой лучший способ избавиться от этой темы?

Редактировать: установка нити в фон, казалось, делала это быстрее prospectCrawlerThread.IsBackground = true;

Ответы [ 2 ]

5 голосов
/ 20 марта 2009

Стоит отметить, что Thread.Abort, как правило, плохая практика, и ее следует избегать:

"прерывание потока - это чистое зло. Постарайся никогда этого не делать!"
- Эрик Липперт, Fabulous Adventures In Coding

«Тема. Аборт - признак плохо разработанной программы»
- Блог MVP Питера Ричи

3 голосов
/ 20 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...