Nic*_*aux 2 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");
Run Code Online (Sandbox Code Playgroud)
所有这一切都发生在一个线程中.当表单关闭时,它会尝试处理该线程
if (prospectCrawlerThread != null)
{
prospectCrawlerThread.Abort();
//prospectCrawlerThread.Join();
prospectCrawlerThread = null;
}
Run Code Online (Sandbox Code Playgroud)
我通过取消注释.Join(),并通过暂停调试并查看仍在运行的线程来证实这一点.
什么是摆脱这个线程的最佳方法?
编辑:将线程设置为背景似乎使其更快
prospectCrawlerThread.IsBackground = true;
值得指出的是,这Thread.Abort通常是一种不好的做法,应该避免:
"堕落一线是纯粹的邪恶.尽量不要这样做!"
- Eric Lippert,编码中的神话般冒险"Thread.Abort是一个设计糟糕的程序的标志"
- Peter Ritchie的MVP博客
| 归档时间: |
|
| 查看次数: |
941 次 |
| 最近记录: |