Example #1
0
        // Handle end (continue) of task
        private static void TaskEnd(TaskContainer te, Task t)
        {
            if (te == null || t == null)
            {
                return;
            }

            // prepare task end event
            var taskEndEvent = new TaskEndEvent
            {
                AutoRestart = te.AutoRestart,
                Task        = t,
                Name        = te.Name
            };

            // Fire end notification
            te.OnTaskEnd?.Invoke(te, new EventArgs <TaskEndEvent>(taskEndEvent));

            // Check for auto restart
            if (taskEndEvent.AutoRestart)
            {
                //Avoid deadlock better way?
                Task.Run(() => te.ForceStart()).ConfigureAwait(false);
            }
            else     // cleanup
            {
                //Avoid deadlock better way?
                Task.Run(() => te.Stop()).ConfigureAwait(false);
            }
        }
Example #2
0
        /// <summary>
        /// Create a new task container
        /// </summary>
        /// <param name="name">container/task name</param>
        /// <param name="spawner">the spawn function</param>
        /// <returns></returns>
        public static TaskContainer Create(string name, Func <CancellationToken, Task> spawner)
        {
            if (spawner == null)
            {
                throw new ArgumentNullException(nameof(spawner));
            }

            var te = new TaskContainer
            {
                SpawnerFunc = spawner,
                Name        = name
            };

            return(te);
        }
Example #3
0
        private static void ReadKeys()
        {
            ConsoleKeyInfo key = new ConsoleKeyInfo();

            while (!Console.KeyAvailable && key.Key != ConsoleKey.Escape)
            {
                key = Console.ReadKey(true);

                switch (key.Key)
                {
                case ConsoleKey.UpArrow:
                    Console.WriteLine("UpArrow was pressed");
                    Counter c = new Counter();
                    TaskContainer.Create("tak", (tok) => AddCounterTask(tok, c));
                    break;

                case ConsoleKey.DownArrow:
                    Console.WriteLine("DownArrow was pressed");
                    break;

                case ConsoleKey.RightArrow:
                    Console.WriteLine("RightArrow was pressed");
                    break;

                case ConsoleKey.LeftArrow:
                    Console.WriteLine("LeftArrow was pressed");
                    break;

                case ConsoleKey.Escape:
                    break;

                default:
                    if (Console.CapsLock && Console.NumberLock)
                    {
                        Console.WriteLine(key.KeyChar);
                    }
                    break;
                }
            }
        }