HttpListener timeout sur getcontext
Hello,
Alors mon message est un peu long, désolé.
j'ai commence le C# et j'ai beaucoup codé en java avant alors je voudrais savoir quelque chose que je faisais souvent en java avant : mettre un timeout sur un listener de socket (ie, il écoute jusqu'au timeout et ensuite s'arrête)
Je m'explique, voila ce que je faisais en pseudo code
[Thread d'écoute]
Code:
1 2 3 4 5 6
| while (listener.isListening) {
Lock (Verrou) {
listener.getResponse(); //appel bloquant jusqu'au TimeOut
traitement de la réponse;
}
} |
[Thread principal]
Code:
1 2 3
|
Lock(Verrou)
listener.isListening = false; |
Je fais ça pour arrêter correctement le thread d'écoute.
maintenant un peu de C# pour vous montrer mon code actuel que je trouve moche. Je catch une exception quand le thread s'arrète.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
/// <summary>
/// Listen the port, in a thread in fact
/// </summary>
private void Listen()
{
try
{
while (_listener.IsListening)
{
HttpListenerContext ctx;
ctx = _listener.GetContext(); // appel bloquant
Thread thr = new Thread(ProcessRequest, 0);
thr.Priority = ThreadPriority.Highest;
thr.Start(ctx);
}
}
catch (Exception ex)
{
// ya une erreur, le thread s'arrète
}
} |
et dans le thread principale, quand je ferme mon application
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
/// <summary>
/// stop the service, close the listener
/// </summary>
public void Stop(){
try
{
_listener.Stop();
}
catch (Exception ex)
{
// erreur
}
} |
Bon ok c'est un peu long et c'est de la pinaille, mais on est vendredi aprem, c'est aujourd'hui où jamais pour améliorer mon code ;)