Lease renewal in a message pump looks like a simple timer problem until you ask what happens when the runtime scheduler cannot keep its promises. Daniel Marbach's latest post digs into why that assumption matters.
The scheduler is part of your message pump
TL;DR: The async model is a contract. In .NET, async methods are expected to do little CPU work, spend most of their time awaiting input/output, and make long-running CPU work explicit. Lease renewal depends on that contract. If a handler hides blocking or CPU-heavy work inside an async method, the scheduler assumptions behind renewal can...
planetgeek.ch