Why does Task.Delay() allow an infinite delay?
Timeout.Infinite or -1 is useful when you want to wait indefinitely for a long-running task that will take an indeterminate amount of time to complete, but will eventually complete.
The Win32 API also uses a constant INFINITE = -1 for infinite timeouts.
You wouldn't normally want to use it in a UI thread, as it could freeze the UI (which seems to be your problem). But there are valid use cases in a worker thread - e.g. a server that is blocking waiting for a connection from a client.
I'm using it when I want console application not to terminate. For example, when I'm writing a Web Job for Azure, I need a program that never terminates. Here's the template:
public async Task Main(string args[])
{
var timer = new Timer();
timer.Interval = 6000;
timer.Elapsed += (sender, args) =>
{
// Do something repeatedly, each 1 minute.
};
timer.Start();
// Now what to do to stop the application from terminating!?
// That's the magic:
await Task.Delay(-1);
}