I am coming from a C# background. I understood that there is no
async/await equivalent in D (except fibers which are not suitable
for multi threading), but if I am using threads, what is the D
idiom to implement cancellation?
Usually a long running thread looks like this (in C#):
```csharp
try
{
while (!cancellationToken.IsCancellationRequested)
{
//do some work
await SomethingAsync(cancellationToken);
//do some other work
await Task.Delay(TimeSpan.FromSeconds(5000),
cancellationToken);
}
}
catch (OperationCancelledException e) when (e.Token ==
cancellationToken)
{
//someone cancelled any of the await calls above, we can
swallow it or log it
}
```
The question is how do I pass a `cancellationToken` to the calls
from the loop in order to terminate them before completion. For
example, I learnt about `Thread.sleep` in phobos, but I cannot
pass a cancellation token in order to cancel it before the
intended sleep duration.
Thx.