Scheduling timer once per run.

This way there is no need overlap.
Joining Database.WorkContext.CancellationToken with our own token.
Wait for current work to complete