如何在后台实现UDP监听器? (可用于log4net)
我想在后台运行这个UDPListener
:
// launch this in a background thread private static void UDPListen() { IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) using( var udpClient = new UdpClient(10000)) { while (true) { var buffer = udpClient.Receive(ref remoteEndPoint); var loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); // ... } } }
我可以将它放在Task.Run()
并在while()
循环中运行吗?
这是我在阅读后进行设置的方法,并且有效。 非常简单!
异步方法
private static void UDPListener() { Task.Run(async () => { using (var udpClient = new UdpClient(11000)) { string loggingEvent = ""; while (true) { //IPEndPoint object will allow us to read datagrams sent from any source. var receivedResults = await udpClient.ReceiveAsync(); loggingEvent += Encoding.ASCII.GetString(receivedResults.Buffer); } } }); }
log4net config
文件中的appender
应该设置为:
同步方法
与上面的asynchronous
方法一样,这也可以以非常类似的方式在synchronous
方法中实现:
private static void UDPListener() { Task.Run(() => { using (var udpClient = new UdpClient(11000)) { string loggingEvent = ""; while (true) { //IPEndPoint object will allow us to read datagrams sent from any source. var remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); var receivedResults = udpClient.Receive(ref remoteEndPoint); loggingEvent += Encoding.ASCII.GetString(receivedResults); } } }); }