Singleton pattern, static classes, asynchronous methods, Lazy object - C#