示例#1
0
        public void SetPlan(ResourcePlan plan)
        {
            FreeResources();

            ResourcePlan = plan;

            AllocateResources();
        }
示例#2
0
        public void FreeResources()
        {
            if (ResourcePlan == null || !initialized)
            {
                return;
            }

            foreach (var resource in resources)
            {
                resource.Value.Dispose();
                AccessMonitor.ResourceDisposedEvent(ResourcePlan[resource.Key]);
            }
            resources.Clear();

            ResourcePlan = null;
            initialized  = false;
        }
示例#3
0
        public ActionDispatcher(
            IResourcePlan resourcePlan
            , int numberOfThreadPoolThreads           = 8
            , TaskCreationOptions taskCreationOptions = TaskCreationOptions.None
            , params IActionPipe[] actionPipes)
        {
            pipes           = actionPipes.ToArray();
            resourceManager = new ResourceManager(resourcePlan);

            cancellationTokenSource = new CancellationTokenSource();
            tasks = new Dictionary <IActionPipe, Task>(pipes.Length);

            pool        = new DedicatedThreadPool(new DedicatedThreadPoolSettings(numberOfThreadPoolThreads));
            Scheduler   = new DedicatedThreadPoolTaskScheduler(pool);
            TaskFactory = new TaskFactory(cancellationTokenSource.Token, taskCreationOptions, TaskContinuationOptions.None, Scheduler);

            SetUpProcessingDefaultEvents();

            state = DispatcherState.NotStarted;
        }
示例#4
0
 public ResourceManager(IResourcePlan plan, IAccessMonitor accessMonitor)
 {
     AccessMonitor = accessMonitor;
     resources     = new Dictionary <Enum, IAccessableResource>();
     ResourcePlan  = plan;
 }
示例#5
0
 public ResourceManager(IResourcePlan plan)
 {
     AccessMonitor = new AccessMonitorSink();
     resources     = new Dictionary <Enum, IAccessableResource>();
     ResourcePlan  = plan;
 }