Я написал некоторый код, где я использую Parallel.Foreach, чтобы несколько элементов работали параллельно с бесконечным l oop, т.е. работали нормально после каждых 60 сек c.
Но здесь мое сообщение может быть измененным пользователем в любое время, и мне нужно повторно обработать новое сообщение. Для этого мне нужно отменить бесконечный Parallel.Foreach l oop для повторной обработки обновленного сообщения.
, когда я пытаюсь повторно обработать основной метод, он работает нормально для нового сообщения, но работает дважды, потому что предыдущие запланированные задания не отменяются. Я предполагаю, что мне нужно отменить процесс из Parrallel.Foreach l oop и перезапустить снова для обновления сообщения с новым расписанием.
Так что любой может помочь мне отменить задачу в очереди, которая уже запланирована на следующую 60 секунд.
static void Main(string[] args)
{
List<RealTimeMessage> messages = GetRealTimeMessage();
Parallel.ForEach(messages, (message) =>
{
processMessage(message);
});
Console.ReadLine();
}
private static async void processMessage(RealTimeMessage message)
{
try
{
while (true)
{
await Task.Delay(TimeSpan.FromSeconds(60));
await Task.Run(() => ProceesRequest(message));
}
}
catch (Exception)
{
Console.WriteLine("Critical error");
}
}
private static List<RealTimeMessage> GetRealTimeMessage()
{
List<RealTimeMessage> realTimeMessages = new List<RealTimeMessage>();
realTimeMessages.Add(new RealTimeMessage { MessageText = "Message 4", IntervalTime = "1", MessageType = "AIDX", TimeOfDay = "" });
realTimeMessages.Add(new RealTimeMessage { MessageText = "Message 5", IntervalTime = "2", MessageType = "AMSX", TimeOfDay = "" });
return realTimeMessages;
}
private static void ProceesRequest(RealTimeMessage message)
{
// do domething
}