Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

use .Net UdpClient in a multithreaded environment

I have an instance of a class (lets call it A) which serves some threads, this instance only sends UDP packets via the UdpClient class. It initialize the the UdpClient in its constructor and only serves to send the packets.

It looks something like:

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);
}

}

My questions is:

I know that UdpClient isn't thread-safe (according to MSDN documentation), what is the best way to support multithreaded without using locking mechanism?

  1. On each send create new instance of the UdpClient? (just use some local UdpClient var). performance?

  2. Use ThreadLocal for the UdpClient? but what about the disposing of the UdpClient in this situation?

  3. Any other solution?

like image 591
Tomer Peled Avatar asked Nov 13 '22 11:11

Tomer Peled


1 Answers

Eventually I believe that my current implementation should work with no issues (as long as Microsoft won't change the UdpClient class implementation).

For whom it might be interesting: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/cbdd9818-00f0-499f-a935-d8e555899d64

like image 160
Tomer Peled Avatar answered Nov 15 '22 04:11

Tomer Peled