mirror of
https://github.com/Readarr/Readarr
synced 2025-12-27 02:32:27 +01:00
Fixed: Unnecessary idle cpu usage
ref #4386 (cherry picked from commit 5a69801877eb72899dd9867c39a1b88b7114fe5b)
This commit is contained in:
parent
acb6fc01b3
commit
4eb6cb9dae
2 changed files with 39 additions and 4 deletions
|
|
@ -23,6 +23,8 @@ public void Add(CommandModel item)
|
|||
lock (_mutex)
|
||||
{
|
||||
_items.Add(item);
|
||||
|
||||
Monitor.PulseAll(_mutex);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -68,6 +70,8 @@ public void RemoveMany(IEnumerable<CommandModel> commands)
|
|||
{
|
||||
_items.Remove(command);
|
||||
}
|
||||
|
||||
Monitor.PulseAll(_mutex);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -83,6 +87,8 @@ public bool RemoveIfQueued(int id)
|
|||
{
|
||||
_items.Remove(command);
|
||||
rval = true;
|
||||
|
||||
Monitor.PulseAll(_mutex);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -102,18 +108,43 @@ public IEnumerable<CommandModel> GetConsumingEnumerable()
|
|||
|
||||
public IEnumerable<CommandModel> GetConsumingEnumerable(CancellationToken cancellationToken)
|
||||
{
|
||||
cancellationToken.Register(PulseAllConsumers);
|
||||
|
||||
while (!cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
if (TryGet(out var command))
|
||||
CommandModel command = null;
|
||||
|
||||
lock (_mutex)
|
||||
{
|
||||
if (cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (!TryGet(out command))
|
||||
{
|
||||
Monitor.Wait(_mutex);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (command != null)
|
||||
{
|
||||
yield return command;
|
||||
}
|
||||
|
||||
Thread.Sleep(10);
|
||||
}
|
||||
}
|
||||
|
||||
public bool TryGet(out CommandModel item)
|
||||
public void PulseAllConsumers()
|
||||
{
|
||||
// Signal all consumers to reevaluate cancellation token
|
||||
lock (_mutex)
|
||||
{
|
||||
Monitor.PulseAll(_mutex);
|
||||
}
|
||||
}
|
||||
|
||||
private bool TryGet(out CommandModel item)
|
||||
{
|
||||
var rval = true;
|
||||
item = default(CommandModel);
|
||||
|
|
|
|||
|
|
@ -190,6 +190,8 @@ public void Start(CommandModel command)
|
|||
public void Complete(CommandModel command, string message)
|
||||
{
|
||||
Update(command, CommandStatus.Completed, message);
|
||||
|
||||
_commandQueue.PulseAllConsumers();
|
||||
}
|
||||
|
||||
public void Fail(CommandModel command, string message, Exception e)
|
||||
|
|
@ -197,6 +199,8 @@ public void Fail(CommandModel command, string message, Exception e)
|
|||
command.Exception = e.ToString();
|
||||
|
||||
Update(command, CommandStatus.Failed, message);
|
||||
|
||||
_commandQueue.PulseAllConsumers();
|
||||
}
|
||||
|
||||
public void Requeue()
|
||||
|
|
|
|||
Loading…
Reference in a new issue