В настоящее время я пишу небольшой веб-сервер и создаю новую тему для каждого запроса, получаемого сервером.В основном это так:
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);
}
}
}
Я старался, чтобы мой пример был простым.Очевидно, в моем приложении это немного сложнее.Теперь я пытаюсь инкапсулировать то, что здесь происходит, в директиву if-else.Я думал о методе, подобном следующему:
public void EncapsulateMe(int code, string description)
{
context.Response.StatusCode = code;
context.Response.StatusDescription = description;
}
Проблема в том, что мне тоже нужно передать объект контекста, но я не уверен, как это сделать потокобезопасным и что было бы лучшим способом.Я думал о создании нового класса, который наследуется от Thread и реализует метод ProcessRequest и новый метод EncapsulateMe.Будет ли это сложно для того, что я пытаюсь выполнить?
Редактировать: Я только что узнал, что невозможно написать класс в C #, который происходит от Thread
, потому что этот класс запечатан ...Есть ли способ создать свои собственные темы в C #?Я просто знал это по Java, поэтому я немного растерялся, что это невозможно в c # ...