in src/main/csharp/Threads/DedicatedTaskRunner.cs [111:163]
internal void Run()
{
lock(this.mutex)
{
this.isShutdown.Reset();
}
try
{
while(true)
{
lock(this.mutex)
{
pending = false;
if(this.shutdown)
{
return;
}
}
if(!this.task.Iterate())
{
// wait to be notified.
Monitor.Enter(this.mutex);
if(this.shutdown)
{
return;
}
while(!this.pending)
{
Monitor.Exit(this.mutex);
this.waiter.WaitOne();
Monitor.Enter(this.mutex);
}
Monitor.Exit(this.mutex);
}
}
}
catch
{
}
finally
{
// Make sure we notify any waiting threads that thread
// has terminated.
Monitor.Enter(this.mutex);
this.terminated = true;
Monitor.Exit(this.mutex);
this.isShutdown.Set();
}
}