Проблема в том, что я пытаюсь запустить RunPrivateMethod () несколько раз, но у меня возникают проблемы с блокировкой или просто не работает, когда я использую async / await.Вместо того, чтобы делиться каждой попыткой здесь, я просто выкладываю свою текущую версию.
В RunPrivateMethod () метод exeProcess.WaitForExit () является внешней программой, которая в основном считывает / записывает / обрабатывает / выводит данные.Я попытался запустить это как асинхронную задачу, и это не сработало.
Я не знаю, является ли это рациональной задачей, но я хочу ограничить количество задач, которые запускаются одновременно, поэтому я ставлю Task.WaitAll () в конце каждого блока case.Case (1) и Case (2) всегда запускаются.
Итак, вот мой код.В настоящее время он блокируется при загрузке каждой задачи.Тогда кажется, что выполняется только последнее задание.Это работает правильно, если я вычеркну все операторы Task и выполню все нормально.
Я бы очень и очень признателен за любой вклад или помощь по этому вопросу.Большинство моих тестов заканчиваются блокированием моей системы и клавиатуры.
public void RunSomeTasks(int group)
{
switch (group)
{
case (1):
{
Task.Run(async () => await RunAsyncMethod(param1, param1, group));
Task.Run(async () => await RunAsyncMethod(param1, param2, group));
Task.Run(async () => await RunAsyncMethod(param1, param3, group));
Task.WaitAll();
break;
}
case (2):
{
Task.Run(async () => await RunAsyncMethod(param2, param1, group));
Task.Run(async () => await RunAsyncMethod(param2, param2, group));
Task.Run(async () => await RunAsyncMethod(param2, param3, group));
Task.WaitAll();
break;
}
}
}
async Task RunAsyncMethod(string var1, string var2, string varGroup)
{
////////////////////////////////////////////
// Use ProcessStartInfo class
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "SomeOutsideEXE";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = var1 + " " + var2 + " " + varGroup;
using (Process exeProcess = Process.Start(startInfo))
{
// did not work -> Task.Run(() => exeProcess.WaitForExit()).Wait();
exeProcess.WaitForExit();
}
}
}
Я работал над этим бесчисленное количество часов и читал книгу Клири, и эта последняя редакция является версией этого поста: Aync / Awaitдействие в Task.Run () Текущие результаты состоят в том, что последнее задание в каждом наборе работает, хотя exeProcess запускается в нужное время.Я не могу использовать клавиатуру во время ее работы.
Я, очевидно, попробовал прямой асинхронный метод для RunSomeTasks (), а затем сначала ждал RunAsyncMethod.Я серьезно мог бы использовать некоторую помощь и, да, я уже знаю, что я не знаю, какого черта я делаю, несмотря на долгие часы чтения и проб и ошибок.