У меня есть этот сценарий. у меня есть таймер (с autoreset = true), который выполняется каждые, скажем, 2 секунды, и когда таймер срабатывает, он будет go и вызовет 10 различных URL-адресов для сбора данных. каждый дубль в среднем 1se c.
Я запускаю это параллельно. foreach l oop, но происходит то, что большинство вызовов возвращаются быстро, но иногда некоторые из них занимают больше времени. тогда общее время, необходимое для получения всех 10 запросов, скажем, 10 секунд.
Следующее событие не сработает, пока все параллельные запросы не будут завершены, прежде чем таймер сможет повторить попытку, поэтому теоретически он не опрашивает URL-адреса каждый раз. 2 секунды.
public List<string> Urls {get;set;}
private Timer SetupTimer()
{
var timer = new Timer(2000);
timer.AutoReset = false;
timer.Elapsed += timer_Elapsed;
timer.Start();
return timer;
}
private async void timer_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
Parallel.ForEach(Urls, url=>
{
var data= _dataService.GetData(url);
SetOnDataRecieved(new DataRecievedEventArgs(data));
});
}
finally
{
if (timer == null) return;
if (!timer.Enabled) { timer.Enabled = true; }
timer.Start();
}
}
Какой лучший способ реализовать это? Спасибо.