Youre on the right way, try this:
WaitHandle.WaitAny(
new[] { token.WaitHandle, ForceLoopIteration },
TimeSpan.FromSeconds(67));
This waits for the occurence of one of the following
- cancelation is requested on
token
ForceLoopIteration
is set- timeout of 67 seconds has been elapsed