What is the difference between the two asynchronous forms? Which has better performance by handling sockets and handling thousands of connections simultaneously?
Example for BeginXXX: link
Example for XXXAsync: link
None. One was made to meet a "standard" asynchronous programming and the other one.
See: link
The first "Begin" is to meet the Asyncronous Programming Model (APM) and the second (BlahBlahBlahAsync) to meet the Task-based asyncronous pattern (TAP). Tasks' is newer and simpler to use.
In time, on my blog: link you find examples of socket server with both scenarios and some explanations about the gains obtained with I / O asynchronous in general.
In terms of performance, both are the same, the connection is always made using the "Socket" class.
But in the BeginXXX example, it is a simpler solution, using the basic form of Async usage.
In the example of XXXAsync is an example based on events, this example is more complete because in this example it already expects up to 100 concurrent connections as can be seen in this line:
listenSocket.Listen(100);
To describe what you need, you could use any of these solutions, but XXXAsync is already closer and ready for what you want, notice that it is already an example of a server, just implement the desired actions .
Now, depending on what you do, and who you consume, you can eliminate various network layer concerns by using WCF or even WebAPI. But that will depend on the requirements of the project.