This discussion https://chat.fhir.org/#narrow/stream/179171-dotnet/topic/Encountered.20an.20error.20while.20loading.20schema surfaces the issue that most of our code is not thread safe. It does not have to be, and in fact most classes in Microsoft's stack aren't either, but in this case it does mean that to safely do multi-threaded validation, one needs to create multiple instances of the validator and the resolvers, which will mean multiple instances of caches.
This is an inconvenience that we might want to fix in a future (major?) release of the validator.