Should I make the FipsIsValid Syncrhonized function or use some kind of parallel dialing? Or not needed?
I think the key to this is the fact that you only search on HashSet, not mutate it. Since it is initialized once, and only once, there is no need to synchronize the search.
If you decide that as you need to mutate it, you need to use the correct lockor parallel collection.
On the side of the note, you can simplify your singleton by initializing the instance field once inside the static constructor:
private static FipsLookup instance;
static FipsLookup()
{
instance = new FipsLookup();
}
Instance , [MethodImpl(MethodImplOptions.Synchronized)]:
public static FipsLookup Instance
{
get
{
return instance;
}
}