【发布时间】:2019-04-04 18:13:55
【问题描述】:
我需要运行一个始终作为 Windows 服务侦听的套接字。 我在 C# 中这样做
我的程序有一个可执行版本,它使用以下代码
Console.WriteLine("sock1");
SynchronousSocketListener synchronousSocketListener = new SynchronousSocketListener();
synchronousSocketListener.StartListening();
Console.WriteLine("sock2");
此代码在将程序作为可执行文件运行时有效,但在作为服务运行时无效,因为套接字侦听器永远不会返回,因此会阻止服务启动。 (“sock2”从不打印)
我尝试了以下代码来异步运行套接字侦听器(这是在程序的可执行版本而不是服务版本中完成的,这就是为什么存在 main 方法而不是 onStart 方法的原因。
class Program
{
public static int Main(String[] args)
{
Console.WriteLine("sock1");
Program a = new Program();
var blah = a.startSocketListenerAsync();
Console.WriteLine("sock2");
Thread.sleep(1000000);
return 0;
}
public async Task<string> startSocketListenerAsync()
{
SynchronousSocketListener synchronousSocketListener = new SynchronousSocketListener();
await Task.Run( () => synchronousSocketListener.StartListening() );
return "hello world";
}
}
如果我设置了足够长的睡眠时间,这将异步运行套接字侦听器(sock2 打印),问题是该程序在主线程完成后立即终止(用它关闭套接字线程)
我怎样才能让它作为服务工作?
【问题讨论】:
标签: c# multithreading service