Mike Scott has pointed out a bug in this code, relating to the use of DateTime.Now vs. DateTime.UtcNow, which can cause inaccurate wait durations during daylight change time.
That made me think for a bit, there are things that just naturally make me highly suspicious, because they are a common source for bugs.
Using a WCF service in a using block, creating a session factory, a foreach loop with database calls, a select without a limit clause.
What are the things that cause a flashing neon sign to go through your head when you see them in code? The stuff that you know will have to be re-read twice to make sure it is bug free.