基本上我试图能够限制迭代列表的执行。c#限制每次迭代
我真的很喜欢使用RX的想法,因为我可以建立它的顶部,并有一个更优雅的解决方案,但它不必使用RX来完成。
我已经制定了这个在很多比我聪明的帮助下。我的问题是,我想能够说someCollection.RateLimitedForEach(速度,函数),并最终阻止它,直到我们完成处理...或者让它成为异步方法。
该函数下面的演示,在控制台应用程序中工作,但如果我在foreach后关闭,它会立即返回。
我只是有种不知所措,这是否是可以解决,或者我应该去了解它完全不同
public static void RateLimitedForEach<T>(this List<T> list, double minumumDelay, Action<T> action)
{
list.ToObservable().Zip(Observable.Interval(TimeSpan.FromSeconds(minumumDelay)), (v, _) => v)
.Do(action).Subscribe();
}
//rate limits iteration of foreach... keep in mind this is not the same thing as just sleeping for a second
//between each iteration, this is saying at the start of the next iteration, if minimum delay time hasnt past, hold until it has
var maxRequestsPerMinute = 60;
requests.RateLimitedForeach(60/maxRequestsPerMinute,(request) => SendRequest(request));
把东西,并让消费者把他们按照自己的速度(与任何异步机制选择,选择包括 - 但不限于 - 线程池:
试试这个,任务,计时器,后台线程...)。 – Theraot