什么是关闭WCF线程的最佳方法?

时间:2009-03-20 03:23:29

标签: c# wcf multithreading

我的申请需要很长时间才能完成。当我关闭应用程序时,它会尝试处理许多执行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 个答案:

答案 0 :(得分:5)

值得指出的是Thread.Abort通常是一种不好的做法,应该避免:

  

“中止线索是纯粹的邪恶。尽量不要这样做!”    - Eric Lippert, Fabulous Adventures In Coding

     

“Thread.Abort是一个设计不良的程序的标志”
   - Peter Ritchie's MVP Blog

答案 1 :(得分:3)

IsBackgroundThread = true将在表单关闭时自动中止线程,所以我认为如果你只想杀死它,那就是你要找的东西。