What is the threading model for PlayerIO? Is it like Node.JS with cooperative scheduling (where locks are usually unneeded), or like other multi-threaded applications (where locks are needed)?
Other posts say that PlayerIO is the latter and that multiple methods in the Game<P> class can be executing simultaneously.
If that is true, does it mean overridden methods (GotMessage, UserJoined, AllowUserJoin, etc.) need to use locks?
Also, doesn't that imply it is unsafe to use a foreach loop over IEnumerable<P> Players, as it could change in the middle of the loop?