Ejemplo n.º 1
0
        public static void RunInCurrentStackframe([NotNull] Lifetime lifetime, [NotNull] string name, Action <SingleThreadScheduler> beforeStart = null)
        {
            var res = new SingleThreadScheduler(name, new ActionQueue(lifetime))
            {
                Thread = Thread.CurrentThread
            };

            beforeStart?.Invoke(res);

            res.Run();
        }
Ejemplo n.º 2
0
        public static SingleThreadScheduler RunOnSeparateThread([NotNull] Lifetime lifetime, [NotNull] string name, Action <SingleThreadScheduler> beforeStart = null)
        {
            var res    = new SingleThreadScheduler(name, new ActionQueue(lifetime));
            var thread = new Thread(() => res.Run())
            {
                Name = name
            };

            res.Thread = thread;

            beforeStart?.Invoke(res);

            thread.Start();
            return(res);
        }
Ejemplo n.º 3
0
        public static SingleThreadScheduler CreateOverExisting([NotNull] SingleThreadScheduler existingScheduler, [NotNull] string name, int actionPriority = PrioritizedAction.NormalPriority)
        {
            if (existingScheduler == null)
            {
                throw new ArgumentNullException(nameof(existingScheduler));
            }
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }

            return(new SingleThreadScheduler(name, existingScheduler.myQueue, actionPriority)
            {
                Thread = existingScheduler.Thread
            });
        }