J'ai une application qui prend des âges à fermer. Lorsque je ferme l'application, elle essaie de disposer un certain nombre de threads qui effectuent l'analyse TCP, les tentatives WCF P2P, etc. Le problème réside dans un thread WCF qui se bloque sur une méthode pendant environ 17 secondes.Quel est le meilleur moyen de fermer un thread WCF?
IP2PAuthenticationService server;
ChannelFactory<IP2PAuthenticationService> channelFactory;
channelFactory = new ChannelFactory<IP2PAuthenticationService>(binding, endpointAddress);
server = channelFactory.CreateChannel();
string result = server.SendMyDetails(myContract, "foo");
Alors tout cela se passe à l'intérieur d'un fil. Lorsque le formulaire se ferme, il tente d'éliminer le fil
if (prospectCrawlerThread != null)
{
prospectCrawlerThread.Abort();
//prospectCrawlerThread.Join();
prospectCrawlerThread = null;
}
J'ai confirmé ce décommenter les .Join()
, et aussi en arrêtant la mise au point et de voir les fils qui sont encore en cours d'exécution.
Quelle est la meilleure façon de se débarrasser de ce fil?
Edit: réglage du fil à fond semblait rendre plus rapide prospectCrawlerThread.IsBackground = true;
Cette meilleure pratique pour les fils de sockety? –
Il fera le travail, cependant, je construirais d'une certaine façon de fermer des sockets sur l'événement FormClosing de l'application. Surtout si vous êtes le côté serveur. – Brandon