我正在使用 UDP 套接字将事件日志数据发送到日志分析服务器,并且不想不必要地阻塞线程。发送应用程序是使用默认线程池的 Windows 后台服务。
// Should this be async? It's UDP only...
public static void LogUDP(string message)
{
try
{
var hostname = ConfigurationManager.AppSettings.Get<string>("SyslogUDPHostName", string.Empty);
var portString = ConfigurationManager.AppSettings.Get<string>("SyslogUDPHostPort", string.Empty);
var port = Convert.ToInt32(portString);
var ipParse = System.Net.Dns.GetHostAddresses(hostname);
var ip = ipParse.First();
// Create Endpoint
var udpEndpoint = new System.Net.IPEndPoint(ip, port);
// Create Socket
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.Ttl = 26;
// Connect the socket
socket.Connect(udpEndpoint);
// Create the encoded buffer
var buffer = System.Text.Encoding.ASCII.GetBytes(message);
// Send the buffer
var sent = socket.Send(buffer);
}
catch (Exception ex)
{
}
}
是否有必要或建议对基于 UDP 的仅出站消息使用异步?
我正在查看Microsoft 提供的示例代码以了解如何编写等效的异步代码,但不确定是否需要。当我查看 BeginSend 的重载并且每个方法都有一个 AsyncCallback 时,我的疑问再次得到证实,而对于 UDP,我不确定要放什么(null?)?
欢迎咨询。