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(); }
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); }
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 }); }