Constructing ClientApplication entails at least one HTTP request, for tenant discovery. This adds all the costs and failure modes associated with the network to constructing the class. In my own code I therefore defer constructing (subclasses of) ClientApplication until I want to authenticate. That's a feasible workaround but please consider taking a similar approach in msal, deferring discovery until a method requiring I/O is called.