Use TimeProvider instead of DateTime.UtcNow in testable code
Inject TimeProvider when business logic depends on the current time, then control that time in tests.
Inject TimeProvider when business logic depends on the current time, then control that time in tests.
Prefer Task unless you have a measured allocation reason and a simple consumption contract.
Treat nullable warnings as pressure to make object state and API contracts clearer.