Sicherung gnaz neu
This commit is contained in:
@@ -1,76 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
||||
namespace RoboSharp
|
||||
{
|
||||
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
|
||||
/// <summary>
|
||||
/// Object derived from TaskScheduler. Assisgns the task to some thread
|
||||
/// </summary>
|
||||
public class PriorityScheduler : TaskScheduler
|
||||
|
||||
{
|
||||
/// <summary> TaskScheduler for AboveNormal Priority Tasks </summary>
|
||||
public static PriorityScheduler AboveNormal = new PriorityScheduler(ThreadPriority.AboveNormal);
|
||||
|
||||
/// <summary> TaskScheduler for BelowNormal Priority Tasks </summary>
|
||||
public static PriorityScheduler BelowNormal = new PriorityScheduler(ThreadPriority.BelowNormal);
|
||||
|
||||
/// <summary> TaskScheduler for the lowest Priority Tasks </summary>
|
||||
public static PriorityScheduler Lowest = new PriorityScheduler(ThreadPriority.Lowest);
|
||||
|
||||
|
||||
private BlockingCollection<Task> _tasks = new BlockingCollection<Task>();
|
||||
private Thread[] _threads;
|
||||
private ThreadPriority _priority;
|
||||
private readonly int _maximumConcurrencyLevel = Math.Max(1, Environment.ProcessorCount);
|
||||
|
||||
public PriorityScheduler(ThreadPriority priority)
|
||||
{
|
||||
_priority = priority;
|
||||
}
|
||||
|
||||
public override int MaximumConcurrencyLevel
|
||||
{
|
||||
get { return _maximumConcurrencyLevel; }
|
||||
}
|
||||
|
||||
protected override IEnumerable<Task> GetScheduledTasks()
|
||||
{
|
||||
return _tasks;
|
||||
}
|
||||
|
||||
protected override void QueueTask(Task task)
|
||||
{
|
||||
_tasks.Add(task);
|
||||
bool _executing = false;
|
||||
if (_threads == null)
|
||||
{
|
||||
_threads = new Thread[_maximumConcurrencyLevel];
|
||||
for (int i = 0; i < _threads.Length; i++)
|
||||
{
|
||||
int local = i;
|
||||
_threads[i] = new Thread(() =>
|
||||
{
|
||||
foreach (Task t in _tasks.GetConsumingEnumerable())
|
||||
_executing = base.TryExecuteTask(t);
|
||||
});
|
||||
_threads[i].Name = string.Format("PriorityScheduler: ", i);
|
||||
_threads[i].Priority = _priority;
|
||||
_threads[i].IsBackground = true;
|
||||
_threads[i].Start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override bool TryExecuteTaskInline(Task task, bool taskWasPreviouslyQueued)
|
||||
{
|
||||
return false; // we might not want to execute task that should schedule as high or low priority inline
|
||||
}
|
||||
}
|
||||
#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
|
||||
}
|
||||
Reference in New Issue
Block a user