Do you mean how would you handle initialising the singleton instance? There are a few methods to do this, for example double-check locking or using Lazy<> - Jon Skeet's written an article about them here:
https://csharpindepth.com/Articles/Singleton
As for state inside the singleton itself you should consider using Interlocked where possible if you're writing shared primitive values:
https://learn.microsoft.com/en-us/dotnet/api/system.threading.interlocked?view=net-5.0
Consider using thread-safe collections:
https://learn.microsoft.com/en-us/dotnet/standard/collections/thread-safe/
And in other instances where state is mutated by one or more threads consider implementing locks where appropriate.
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/lock-statement