void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
var workerParams = e.Argument as WorkerParams;
var backgroundWorker = sender as BackgroundWorker;
backgroundWorker.ReportProgress(0, "Waiting");
bool obtained = workerParams.Semaphore.Wait(); // we don't really care if we obtained entry pass or not
try
{
DownloadChapter(backgroundWorker, e, workerParams.Chapter, workerParams.OutputFolder, workerParams.FormatProvider);
}
finally
{
if(obtained)
workerParams.Semaphore.Release();
}
}