Given, instances of CookieContainer are not thread safe.
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
So it turns out I cannot use the same container across multiple concurrent HTTP requests without synchronization. Unfortunatelly from the documentation at MSDN it's not clear how one can properly synchronize it.
A solution would be using a copy of a master container for each request and once the request is finished the cookies from the copy could be merged back to the master container. Creating a copy and merging can be done in a synchronized manner.
So the question is : how can I make a copy of an instance of the CookieContainer class?