Недавно я обновил личный проект, над которым я работал, для использования .Net framework 4.5. При обновлении моего приложения и использовании новых функций Async и Await я подумал о том, чтобы улучшить свой собственный внутренний Http-сервер, который использует ThreadPool для обработки запроса и отправки ответа клиенту. Было бы лучше использовать задачи вместо этого?Задачи или ThreadPool для обработки HTTP-запросов?
Вот мой текущий код:
/// <summary>
/// Accepts the connection
/// </summary>
private static void DoAcceptClientCallback(IAsyncResult Sync)
{
try
{
// Finish accepting the client
HttpListenerContext Context = Listener.EndGetContext(Sync);
ThreadPool.QueueUserWorkItem(HandleRequest, new HttpClient(Context));
}
catch (HttpListenerException E)
{
// Thread abort, or application abort request
if (E.ErrorCode == 995)
return;
ServerLog.Write("ERROR: [DoAcceptClientCallback] \r\n\t - {0}\r\n\t - ErrorCode: {1}", E.Message, E.ErrorCode);
}
catch (Exception E)
{
ServerLog.Write("ERROR: [DoAcceptClientCallback] \r\n\t - {0}", E.Message);
}
// Begin Listening again
if(IsRunning)
Listener.BeginGetContext(new AsyncCallback(DoAcceptClientCallback), Listener);
}
/// <summary>
/// Handles the Http Connecting client in a new thread
/// </summary>
private static void HandleRequest(object Sync)
{
/// ... Processing Stuff is done here to serve the page back to the client
}
'Задача' - это просто инструмент, который позволяет выполнять асинхронную операцию, например запросы на запуск метода в потоке пула потоков, которые выполняются по-разному. Он прост в использовании. Предпочитаете ли вы это или нет, это решение, которое вы * должны сделать. Если * вам * нравится это лучше, используйте его. Если вы этого не сделаете, тогда не делайте этого. – Servy
Обратите внимание, что если вы уже используете фреймворк, такой как ASP.NET, он будет обрабатывать запросы от вашего имени и управлять инфраструктурой потоков. –
Его настольное приложение winform – Wilson212