Windows服务不需要创建计时器来继续运行.它可以建立文件监视器使用FileSystemWatcher来监视目录或启动异步套接字侦听器.
这是一个简单的基于TPL的监听器/响应器,无需将线程专用于进程.
private TcpListener _listener;
public void OnStart(CommandLineParser commandLine)
{
_listener = new TcpListener(IPAddress.Any, commandLine.Port);
_listener.Start();
Task.Run((Func<Task>) Listen);
}
private async Task Listen()
{
IMessageHandler handler = MessageHandler.Instance;
while (true)
{
var client = await _listener.AcceptTcpClientAsync().ConfigureAwait(false);
// Without the await here, the thread will run free
var task = ProcessMessage(client);
}
}
public void OnStop()
{
_listener.Stop();
}
public async Task ProcessMessage(TcpClient client)
{
try
{
using (var stream = client.GetStream())
{
var message = await SimpleMessage.DecodeAsync(stream);
_handler.MessageReceived(message);
}
}
catch (Exception e)
{
_handler.MessageError(e);
}
finally
{
(client as IDisposable).Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
这些都不需要计时器
| 归档时间: |
|
| 查看次数: |
3418 次 |
| 最近记录: |