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

标签 c# .net multithreading thread-local udpclient

我有一个服务于某些线程的类实例(我们称它为 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 文档),在不使用锁定机制的情况下支持多线程的最佳方法是什么?

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

  2. 为 UdpClient 使用 ThreadLocal?但是在这种情况下如何处理 UdpClient?

  3. 还有其他解决方案吗?

最佳答案

最终我相信我当前的实现应该没有问题(只要 Microsoft 不会更改 UdpClient 类实现)。

可能对哪些人感兴趣: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/cbdd9818-00f0-499f-a935-d8e555899d64

关于c# - 在多线程环境中使用 .Net UdpClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14868927/

相关文章:

c# - 在字符串 C# 中查找子字符串的计数

c# - IQueryable 不在 SQL 中附加 WHERE 语句

c# - 何时以及如何交换 .NET 托管堆?

.net - 在 C# 中使用模式进行 XML 解析

c# - 异步操作和 UI 更新

android - 在Android后台线程中使用Realm一次存储所有信息

c# - 使用 C# 在 USB 上创建多个分区

c# - 为什么C#的System.Collections.Generic中没有String<T>?

.net - 当 .Net 垃圾回收速度低于创建/删除对象的速度时该怎么办?

Java:线程中的 NotifyObserver 和 DeadLock