Meh*_*rad 0 c# log4net asynchronous backgroundworker async-await
我想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);
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以把它放在一个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);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
将appender在log4net的 config文件应设置为一样的东西:
</log4net>
<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
<remoteAddress value="127.0.0.1" />
<remotePort value="11000" />
<layout type="log4net.Layout.PatternLayout, log4net">
<conversionPattern value="%-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<appender-ref ref="UdpAppender" />
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)
与上述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);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3024 次 |
| 最近记录: |