Есть функция. Туда я бросаю список List<double>
, прохожусь по каждому элементу и рассчитываю некоторыми функциями новый массив. Так вот, каждую минуту поступает новый элемент в мой список и необходимо получить новый элемент в новом массиве. Получается, я буду каждый раз рассчитывать заного весь массив, чтобы получить конечный результат, т.к. там предыдущий расчет влияет на следующее значение. Есть ли как-нибудь способ, рассчитать, ждать, пока получу новый элемент, и просто продолжить цикл for уже с новый элементом?
Ваша задача похожа на паттерн producer/consumer. Один участок кода производит данные, другой - потребляет их.
В современном C# очень удобно использовать конвейеры (pipelines).
Упрощённый пример, как это может выглядеть в вашем случае:
class Program
{
static void Main(string[] args)
{
var inputValues = new BlockingCollection<double>();
var getValues = Task.Run(() =>
{
try
{
var rnd = new Random();
for (int i = 0; i < 10; i++)
{
inputValues.Add(rnd.NextDouble());
Thread.Sleep(1000);
}
}
finally { inputValues.CompleteAdding(); }
});
var processValues = Task.Run(() =>
{
foreach (var value in inputValues.GetConsumingEnumerable())
{
ProcessValue(value);
}
});
Task.WaitAll(getValues, processValues);
}
static void ProcessValue(double value)
{
var result = value * 100;
Console.WriteLine(result);
}
}
В данном консольном приложении один поток помещает данные в BlockingCollection
, другой считывает их по мере поступления и выполняет обработку. Благодаря вызову метода GetConsumingEnumerable
второй поток будет сколь угодно долго ждать появления новых данных. До тех пор, пока первый поток не вызовет метод CompleteAdding
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть программа, в которой проводится цикл и в нем параллельные вычисленияВсе вычисления, как я понял, проходят на процессоре, использую всё...
Возможно ли по средством кода добавить в Prefab другой Prefab? К примеру есть рукоядка топора и одеть на неё лезвие топора?
Привет!Я разрабатываю для себя приложение на С# с использованием Entity Framework и у меня начало получатся добавлять и выводить данные с базы но мне...
Как задать минимально возможный размер окна консоли, меньше которого пользователь не сможет её уменьшить?! Спасибо за ответ ;)