首页 文章

在多线程环境中使用.Net UdpClient

提问于
浏览
3

我有一个类的实例(让我们称之为A)为一些线程提供服务,这个实例只通过UdpClient类发送UDP数据包 . 它在其构造函数中初始化UdpClient,仅用于发送数据包 .

它看起来像:

public class A{

private UdpClient m_Client;
public class A(string host, int port){

    m_Client = new UdpClient(host, port);
}

public void Send(string dataToSend){

 var data= encoding.GetBytes(dataToSend);
 client.BeginSend(data, data.Length, null, null);
}

}

我的问题是:

我知道UdpClient不是线程安全的(根据MSDN文档),在不使用锁定机制的情况下支持多线程的最佳方法是什么?

  • 在每次发送时创建UdpClient的新实例? (只需使用一些本地UdpClient var) . 性能?

  • 为UdpClient使用ThreadLocal?但是在这种情况下处理UdpClient怎么样?

  • 任何其他解决方案?

2 回答

  • 1

    最终我相信我当前的实现应该没有问题(只要微软不会改变UdpClient类的实现) .

    对谁而言可能很有趣:http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/cbdd9818-00f0-499f-a935-d8e555899d64

  • 0

    我认为这里最好的方法是每次调用方法时创建一个新的 UdpClient . 这样,您可以确保代码是安全的 . 性能不太可能是一个问题,如果分析显示它是,那么你应该开始解决它 .

    此外,您不应忘记在每个 BeginSend() 之后调用 EndSend() (理想情况下在回调中) .

相关问题