Onur Onur - 2 months ago 12
C# Question

How to "sleep" until timeout or cancellation is requested in C#4.0

What's the best way to

sleep
a certain amount of time, but be able to be interrupted by a
IsCancellationRequested
from a
CancellationToken
?

I'm looking for a solution working in C#4.0.

I'd like to write

void MyFunc (CancellationToken ct)
{
//...
// simulate some long lasting operation that should be cancelable
Thread.Sleep(TimeSpan.FromMilliseconds(10000), ct);
}

Answer

I just blogged about it here:

CancellationToken and Thread.Sleep

in Short:

var cancelled = token.WaitHandle.WaitOne(TimeSpan.FromSeconds(5));

In your context:

void MyFunc (CancellationToken ct)
{
   //... 
   // simulate some long lasting operation that should be cancelable 
   var cancelled = ct.WaitHandle.WaitOne(TimeSpan.FromSeconds(10));
}