Actuellement, j'écris un petit serveur web et je crée un nouveau Thread pour chaque requête que reçoit le serveur. Fondamentalement, il est comme ça:Comment encapsuler à partir d'un thread dans une méthode?
public class MyController
{
public void ProcessRequest(object contextObject)
{
HttpListenerContext context = (HttpListenerContext)contextObject;
// handle request
if (someCondition())
{
context.Response.StatusCode = 400;
context.Response.StatusDescription = "Missing something";
}
else
{
context.Response.StatusCode = 200;
context.Response.StatusDescription = "Everything OK";
}
}
public void AcceptRequest()
{
while (true)
{
HttpListenerContext context = HttpListener.GetContext();
Thread thread = new Thread(this.ProcessRequest);
thread.Start(context);
}
}
}
J'ai essayé de garder mon exemple simple. Évidemment, dans mon application, c'est un peu plus compliqué. Maintenant j'essaye d'encapsuler ce qui se passe ici dans la directive if-else. Je pensais à une méthode comme:
public void EncapsulateMe(int code, string description)
{
context.Response.StatusCode = code;
context.Response.StatusDescription = description;
}
Le problème est que je dois transférer aussi l'objet de contexte, mais je ne suis pas sûr de savoir comment faire thread-safe et quelle serait la meilleure façon. J'ai pensé à créer une nouvelle classe dérivée de Thread et implémente la méthode ProcessRequest et la nouvelle méthode EncapsulateMe. Serait-ce compliqué pour ce que j'essaie d'accomplir?
Editer: Je viens de découvrir qu'il n'est pas possible d'écrire une classe dans C# qui dérive de Thread
parce que cette classe est scellée ... est-il possible de créer vos propres Threads en C#? Je savais ce à partir de Java, donc je suis un peu confus qu'il est impossible dans C# ...