【发布时间】:2015-03-27 15:48:00
【问题描述】:
我最近升级了我一直从事的个人项目以使用 .Net 框架 4.5。在更新我的应用程序并利用新的 Async 和 Await 功能时,我还考虑改进我的自定义内部 Http 服务器,该服务器使用 ThreadPool 处理请求并将响应发送回客户端。改用任务会更好吗?
这是我当前的代码:
/// <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
}
【问题讨论】:
-
Task只是一个允许异步操作的工具,例如请求运行线程池线程中的方法,以不同方式执行。它旨在更易于使用。您是否真的喜欢它是您需要做出的决定。如果你更喜欢它,那就使用它。如果你不这样做,那就不要。 -
请注意,如果您已经在使用 ASP.NET 等框架,它将代表您处理请求并管理线程基础结构。
-
它是一个winform桌面应用程序
标签: c# task threadpool