@Xveeder

Как создать таск-менеджер на C#?

Доброго времени суток, друзья.

Предположим, что есть программа, у которой много независимых функций.
Например: получить информацию с сервера, создать файл с данными, сгенерировать изображение.

Задача следующая: нужно создавать динамический список задач, которые можно запускать скопом. Я выбираю нужную функцию, заполняю форму, подключаю все необходимые ресурсы, далее сохраняю эту функцию в таск. Затем так же делаю с остальными.

После сохранения, эти функции преобразованные в таски появляются в виде списка, в таск менеджере. В таск менеджере этот список тасков нужно запустить на исполнение по очереди, в которой они размещены в таск-менеджере

Предположим, что при создании таска, можно данные таска записывать в файл с XML/JSON, а затем парсить их при открытии таск менеджера, но вот как на основе них запустить серию последовательных задач я не могу додуматься.

Прошу, покажите в какую сторону следует смотреть.
Спасибо.
  • Вопрос задан
  • 1522 просмотра
Пригласить эксперта
Ответы на вопрос 3
GavriKos
@GavriKos
Ну очевидно должен быть общий конфиг в том же джсон, в котором указано какие конфиги/задачи запускать. Каждая задача наследуется от одного интерфейса и умеет говорить о своем завершении.

Не до конца понятно, где и как все это должно крутится, так что может вам подойдет что то вроде jenkins или аналогов.
Ответ написан
@Satangelus
Не понимаю затрудений. По идее Вам нужно запустить таймер с неким шагом и по таймеру выполнять процедуру проверки не пора запускать таски. Далее если пора, создаем нитку, считываем порядок запуска задач и запускаем процесс Process.Start(), проверяем циклом статус процесса, пока процесс жив делаем yield() когда процесс завершиться переходим к следующему по списку и повторяем до исчерпания списка.

https://metanit.com/sharp/tutorial/11.9.php
https://metanit.com/sharp/tutorial/18.1.php
Ответ написан
Комментировать
makarenya
@makarenya
программист
using System;
using System.Collections.Generic;

// Давайте договоримся, что для нас не имеет значения,
// как именно сохранены данные. Это может быть json, xml
// А может оказаться что это БД или бинарнас сериализация
// Главное, что данные можно получить через вот этот интерфейс
public interface IDataRecord {
	// Возвращает какое-нибудь свойство запуска
	// Это может быть путь к паке или там количество итераций
	// С точки же зрения xml или json - это значение аттрибута 
	// с именем name
	string Get(string name);
}

// А вот этот интерфейс содержит те методы, которые нам надо вызывать
public interface IProcessor
{
	void MakeChildrenHappy(int numberOfCandys, bool haveClown, string place);
	void BeatAllJedis(string weapoonName, bool killThem, int timeout);
}
					
public class Program
{
	public static void Main()
	{
		var taskList = LoadTasks();
		var processor = CreateProcessor();
		foreach(var task in taskList) 
		{
			var type = task.Get("type");
			switch(type)
			{
				case "make_children_happy":
					RunMakeChildrenHappy(processor, task);
					break;
				case "beat_all_jedis":
					RunBeatAllJedis(processor, task);
					break;
			}
		}
	}
	
	public static void RunMakeChildrenHappy(IProcessor processor, IDataRecord task)
	{
		var numberOfCandys = int.Parse(task.Get("number_of_candys"));
		var haveClown = bool.Parse(task.Get("have_clown"));
		var place = task.Get("place");
		processor.MakeChildrenHappy(numberOfCandys, haveClown, place);
	}
	
	public static void RunBeatAllJedis(IProcessor processor, IDataRecord task)
	{
		var weapoonName = task.Get("weapoon_name");
		var killThem = bool.Parse("kill_them");
		var timeout = int.Parse("timeout");
		processor.BeatAllJedis(weapoonName, killThem, timeout);
	}

	public static List<IDataRecord> LoadTasks() 
	{
		// TODO: на самом деле мы тут подгружает json или xml, или из БД читаем
		// Но пример то не про форматы сохранения.
		return null;
	}
	
	public static IProcessor CreateProcessor()
	{
		// TODO: Ну а тут мы создаём класс, который реализует методы, которые 
		// нам надо вызывать
		return null;
	}
	
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы