private void MeasureTemperatureJob(CancellationToken cancellationToken)
        {
            bool   isHeating = true;
            Random random    = new Random();

            while (true)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    lineIsEmptyEvent.Wait();
                    DispatchMessage(0);
                    cancellationToken.ThrowIfCancellationRequested();
                }

                int temperature = temperatureState.GetTemperature();
                DispatchMessage(temperature);

                if (temperature >= MaxTemperature)
                {
                    reachMinTempEvent.Reset();
                    reachMaxTempEvent.Set();
                    isHeating = false;
                }

                if (temperature <= MinTemperature)
                {
                    reachMaxTempEvent.Reset();
                    reachMinTempEvent.Set();
                    isHeating = true;
                }

                //fake some temperature measurements
                if (isHeating)
                {
                    temperatureState.UpdateTemperature(random.Next(1, 10));
                }
                else
                {
                    temperatureState.UpdateTemperature((-1) * random.Next(1, 10));
                }

                Thread.Sleep(1000);
            }
        }