// Получение сообщений из 1-го буфера, // добавление к ним своей информации и добавление полученного сообщения во 2-ой буфер public void ConsumeProduceThread() { Random rnd = new Random(); int i = 1; string oldMessage, newMessage; while (true) { Thread.Sleep(rnd.Next(3000, 4000)); TryingToGetMessageFromBuffer.Invoke("2-ой поток пытается забрать сообщение из 1-го буфера"); oldMessage = _bufferToGetMessagesFrom.Pop(); MessageGotFromBuffer.Invoke($"2-ой поток забрал сообщение \"{oldMessage}\" из 1-го буфера", true); Thread.Sleep(500); // Добавленная информация представляет из себя номер обрабатываемого данным потоком сообщения newMessage = oldMessage + $" - {i++}"; AddedInfoToMessageAndTryingToAddItToBuffer.Invoke($"2-ой поток добавил к сообщению \"{oldMessage}\" свою информацию и пытается поместить получившееся сообщение \"{newMessage}\" во 2-ой буфер"); _bufferToAddMessagesTo.Push(newMessage); MessageAddedToBuffer.Invoke($"2-ой поток поместил сообщение \"{newMessage}\" во 2-ой буфер", false); } }
// Генерация сообщений и добавление их в буфер private void ProduceMessages() { Random rnd = new Random(); string message; int i = 1; while (true) { Thread.Sleep(rnd.Next(1000, 2000)); // Сообщения представляют из себя номер создаваемого сообщения message = i++.ToString(); CreatedMessageAndTryingToAddItToBuffer.Invoke($"1-ый поток создал сообщение \"{message}\" и пытается поместить его в 1-ый буфер"); _buffer.Push(message); MessageAddedToBuffer.Invoke($"1-ый поток поместил сообщение \"{message}\" в 1-ый буфер", true); } }