Enforcing asynchronous code good practices using a Roslyn analyzer