Каков наилучший способ закрыть поток WCF?

2

У меня есть приложение, которое требует времени для закрытия. Когда я закрываю приложение, он пытается удалить несколько потоков, которые выполняют 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;

Теги:
multithreading
wcf

2 ответа

3
Лучший ответ

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

  • 0
    Это лучшая практика для носки темы?
  • 0
    Это выполнит работу, однако я бы каким-то образом построил закрытие сокетов для события FormClosing приложения. Особенно если вы на стороне сервера.
5

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

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

"Thread.Abort - признак плохо разработанной программы"
    Питер Ритчи Блог MVP

Ещё вопросы

Сообщество Overcoder
Наверх
Меню