用什么算法来计算函数调用的进度?用于报告异步函数调用进度的算法
显然它很容易,如果你有一个循环做的,是这样的:
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)店铺过去在日志功能的时机不好,并使用(但这并不一定会考虑额外的变量 - 在任务的特定时间的CPU,内存等)
但是,是否存在更高级的算法,即使只是为了近似进度?
如果你可以存储过去的时间,那是最好的办法。 CPU和内存是你可能会忍受的限制。过去的时机是未来表现的最好指标 –