It's busy loop.
I think such case should use ConditionVariable.
I assume Expiration value is longer than several second, right?