Luiey Ichigo Ответов: 1

Автоматически запускать несколько консолей


Привет,

Как запустить консольное приложение Windows (C#/VB. NET) одновременно или независимо? У меня есть программа создания, которая должна потреблять данные из WSDL и передавать их в облако для следующей обработки. Код хорошо работает при получении всех устройств, но он имеет задержку перед завершением получения и отправки всех устройств в цикле, потому что существует около 170 ++ устройств, которые должны быть прочитаны.

Вместо того чтобы слишком долго откладывать его перед следующим циклом, как автоматизировать запуск каждой консоли устройства отдельно? Нужно ли мне создавать проекты 170 ++ для достижения этой цели? И будет ли это проблемой при одновременном запуске всей этой консоли/некоторой задержке?

Что я уже пробовал:

Создайте около 20 одинаковых проектов и установите несколько стартап-проектов. Нужен еще один совет

[no name]

Разве это не тот же самый неопределенный "вопрос", который вы повторяете снова и снова? Почему вы вообще рассматриваете возможность создания 170 различных проектов, которые делают одно и то же? Почему бы вам не создать один проект, который использует несколько потоков для выполнения работы?

Philippe Mori

Очевидно, вы пытаетесь использовать неправильный подход... возможно, было бы неплохо сначала изучить многопоточность, а затем написать код, как только вы поймете, как он работает. В противном случае у вас может быть много ошибок и нестабильное приложение.

1 Ответов

Рейтинг:
9

David_Wimbley

Мне не очень ясно, чего вы пытаетесь достичь. Я думаю, что вы спрашиваете, как лучше всего выполнить одну и ту же операцию на 170 различных устройствах.

Вы должны посмотреть на threading/Tasks in. net.

var tasks = new list<task>();
var deviceEndpoints = new List<string>();

foreach (var hostname in deviceEndpoints)
{
	var dhostname = hostname;
    tasks.add(task.factory.startnew(() =>
    {
		//based on the hostname, do something here with dhostname to send/retrieve your data from this device.
    }));
}

// This is to wait for all tasks to complete before proceeding
task.waitall(tasks.toarray());


Используя вышеприведенный код, я смог взять процесс, который занял около 30-40 минут последовательного процесса, до 2 минут, используя асинхронный код выше.

Подробнее о задачах и многопоточности вы можете прочитать здесь:

C# - Многопоточность[^]

многопоточность c# - поиск в Google[^]

Задачи C# - Поиск В Google[^]

Класс Задач (System.Нарезание резьбы.Задачи)[^]