private void SendFirstInternal()
{
if (PackageQueue.Count == 0) return;
if (IsPaused)
{
Logger.Debug("Package handler is paused");
return;
}
// no need to lock InternalWaitHandle between WaitOne(0) call and Reset()
// because all Internal methods of PackageHandler can be only executed by 1 thread at a time
if (InternalWaitHandle.WaitOne(0)) // check if the door is open without waiting (waiting 0 seconds)
{
InternalWaitHandle.Reset(); // close the door (non-signals the wait handle)
RequestHandler.SendPackage(PackageQueue.First());
}
else
{
Logger.Verbose("Package handler is already sending");
}
}