public void Produce() { var path = System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); while (!_stop) { string fileName = Path.Combine(path, "ConsumerProducerFiles", Guid.NewGuid().ToString() + ".txt"); using (StreamWriter fileStream = File.CreateText(fileName)) { WriteFile(fileStream, wordCount); } var success = _buffer.TryAdd(fileName); if (!success) { try { File.Delete(fileName); } finally { Thread.Sleep(sleepCount); } } Thread.Sleep(sleepCount); } }
public void Produce(int wordCount, int sleepCount) { while (true) { string ayy = Guid.NewGuid().ToString(); using (FileStream fileStream = new FileStream("~/Files/" + ayy + ".txt", FileMode.Create)) { writeFile(fileStream, wordCount); var success = _buffer.TryAdd(ayy); if (success) { continue; } else { Thread.Sleep(sleepCount * 2); } } Thread.Sleep(sleepCount); } }
public HttpStatusCode Post(Settings newSettings) { if (_worker._settings == null) { _worker._settings = new Settings(); } if (newSettings == null) { return(HttpStatusCode.BadRequest); } if (_worker._settings.Equals(newSettings)) { return(HttpStatusCode.OK); } //else lock (_worker.locker) { if (_worker._buffer == null) { _worker._buffer = new ConcurrentBuffer(newSettings.BufferSize); } if (_worker._buffer.Size != newSettings.BufferSize) { var buffer = new ConcurrentBuffer(newSettings.BufferSize); //Grab all items in old buffer and place in new buffer. _worker._buffer.switching = true; string[] items = _worker._buffer.ToArray(); foreach (var item in items) { buffer.TryAdd(item); } _worker._buffer = buffer; Parallel.ForEach(_worker._threadManager.GetRunningThreads(), (tuple) => { tuple.Item2._buffer = _worker._buffer; }); } if (_worker._settings.ProducerWordCount != newSettings.ProducerWordCount) { Parallel.ForEach(_worker._threadManager.GetRunningThreads(), (tuple) => { tuple.Item2.wordCount = newSettings.ProducerWordCount; }); } if (_worker._settings.ProducerSleepNum != newSettings.ProducerSleepNum) { Parallel.ForEach(_worker._threadManager.GetRunningThreads(), (tuple) => { tuple.Item2.sleepCount = newSettings.ProducerSleepNum; }); } while (newSettings.NumOfProducers > _worker._threadManager.CurrentCount) { ProducerWorker producer = new ProducerWorker(_worker._buffer, newSettings.ProducerWordCount, newSettings.ProducerSleepNum); Thread thread = new Thread(producer.Produce) { Name = "Producer " + Guid.NewGuid().ToString(), IsBackground = false }; thread.SetApartmentState(ApartmentState.MTA); _worker._threadManager.AddThread(thread, producer); thread.Start(); } while (newSettings.NumOfProducers < _worker._threadManager.CurrentCount) { var tuple = _worker._threadManager.GetRunningThreads()[0]; _worker._threadManager.KillThread(); } _worker._settings = newSettings; } return(HttpStatusCode.OK); }