Какие алгоритмы используются для вычисления хода выполнения вызова функции?
Очевидно, что это легко сделать, если у вас есть цикл, что-то вроде:
Action<Double> notifier = d => Console.WriteLine("Completed: " + d.ToString());
Double _interval = 0.05;
for (int i = 0; i < 1000; i++)
{
int rem = default(int);
Math.DivRem(i, _interval, out rem);
if (rem == 0)
{
double progress = (double)i / 1000;
notifier(progress);
}
}
Но что делать, когда у вас есть какой-то универсальный делегат, и вы хотите запустить его асинхронно, но такжеуведомить другую ветку о ее продвижении, и вы не можете гарантировать, что можете прямо использовать цикл for?Некоторые другие простые способы могут быть следующими:
1) Сначала запрограммируйте функцию (очень плохо для производительности, хотя, если это длительное задание)
2) Сохраните прошлые моменты времени функции в журнале ииспользуйте это (но это не обязательно учитывает дополнительные переменные - процессор, память и т. д. в конкретное время выполнения задачи)
Однако существуют ли какие-либо более продвинутые алгоритмы, даже если они только приближают прогресс?