You probably know about MSDN, so I won't mention reading there on how to use. Why to use is a different story.

FWIW, here's a situation where I use one. I have an application that has multiple clients connect via sockets and sends those requests through a single connection to a server. The server responds, and I need to know which client to send the message back to.

Each client has a moniker, like 101, 102 etc, this is returned as part of the server's message. Of course, I need to know which socket to pass along the message to, this info obviously is not contained in the server's message.

So I have a hashtable that stores the moniker and the (client) socket. So when I get a server message, I look up the moniker in the hashtable and retrieve the socket, then pass along the message.

I'm sure the same thing could be done other ways, but the hashtable seemed perfect for this.