Contine on exception during scanning

This commit is contained in:
Serraniel 2018-01-22 20:07:10 +01:00
parent ee72907744
commit b5945036fd

View file

@ -91,73 +91,81 @@ namespace DML.AppCore.Classes
Logger.Info("Started JobScheduler..."); Logger.Info("Started JobScheduler...");
while (Run) while (Run)
{ {
Logger.Debug("Entering job list handler loop..."); try
//foreach (var job in JobList)
for (var i = JobList.Count - 1; i >= 0; i--)
{ {
var job = JobList[i]; Logger.Debug("Entering job list handler loop...");
Logger.Debug($"Checking job {job}"); //foreach (var job in JobList)
var hasJob = false; for (var i = JobList.Count - 1; i >= 0; i--)
Logger.Trace("Locking scheduler...");
lock (this)
{ {
Logger.Trace("Checking if job is already performed..."); var job = JobList[i];
hasJob = RunningJobs.ContainsKey(job.Id); Logger.Debug($"Checking job {job}");
} var hasJob = false;
Logger.Trace("Unlocked scheduler.");
if (!hasJob)
{
Logger.Debug("Job is not performed yet...Performing job...");
var queue = new Queue<IMessage>();
Logger.Trace("Locking scheduler..."); Logger.Trace("Locking scheduler...");
lock (this) lock (this)
{ {
Logger.Trace("Adding job to running jobs."); Logger.Trace("Checking if job is already performed...");
RunningJobs.Add(job.Id, queue); hasJob = RunningJobs.ContainsKey(job.Id);
} }
Logger.Trace("Unlocked scheduler."); Logger.Trace("Unlocked scheduler.");
Logger.Trace("Issuing job message scan..."); if (!hasJob)
var messages = await job.Scan();
if (messages == null)
continue;
Logger.Trace($"Adding {messages.Count} messages to queue...");
foreach (var msg in messages)
{ {
queue.Enqueue(msg); Logger.Debug("Job is not performed yet...Performing job...");
} var queue = new Queue<IMessage>();
Logger.Trace($"Added {queue.Count} messages to queue.");
if (messages.Count != queue.Count)
Logger.Warn("Not all messages have been added into the queue.");
var startedDownload = false;
while (!startedDownload)
{
Logger.Debug("Entering loop to check thread availability");
Logger.Trace("Locking scheduler..."); Logger.Trace("Locking scheduler...");
lock (this) lock (this)
{ {
Logger.Trace($"Checking thread limit. Running: {RunningThreads}, Max: {Core.Settings.ThreadLimit}"); Logger.Trace("Adding job to running jobs.");
if (RunningThreads >= Core.Settings.ThreadLimit) RunningJobs.Add(job.Id, queue);
continue;
RunningThreads++;
startedDownload = true;
} }
Logger.Trace("Unlocked scheduler."); Logger.Trace("Unlocked scheduler.");
}
Logger.Trace("Start downloading job async."); Logger.Trace("Issuing job message scan...");
Task.Run(() => WorkQueue(job.Id)); // do not await to work parallel var messages = await job.Scan();
if (messages == null)
continue;
Logger.Trace($"Adding {messages.Count} messages to queue...");
foreach (var msg in messages)
{
queue.Enqueue(msg);
}
Logger.Trace($"Added {queue.Count} messages to queue.");
if (messages.Count != queue.Count)
Logger.Warn("Not all messages have been added into the queue.");
var startedDownload = false;
while (!startedDownload)
{
Logger.Debug("Entering loop to check thread availability");
Logger.Trace("Locking scheduler...");
lock (this)
{
Logger.Trace(
$"Checking thread limit. Running: {RunningThreads}, Max: {Core.Settings.ThreadLimit}");
if (RunningThreads >= Core.Settings.ThreadLimit)
continue;
RunningThreads++;
startedDownload = true;
}
Logger.Trace("Unlocked scheduler.");
}
Logger.Trace("Start downloading job async.");
Task.Run(() => WorkQueue(job.Id)); // do not await to work parallel
}
} }
} }
catch (Exception ex)
{
Logger.Error(ex.Message);
}
} }
}); });
} }