한 번에 3 개씩 항목을 처리해야하는 총계 시간이 x 초 미만인 경우 스레드는 나머지 초 동안 잠자기를 기다렸다가 계속 진행해야합니다. 동적 지연을 사용하는 C# 작업
그래서 나는 다음과 같은 일을 해요 :private void ProcessItems()
{
for (int i = 0, n = items.Count; i < n; i++)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
batch.Add(items[i]);
if (batch.Count == 3 || i >= items.Count - 3)
{
List<Task> tasks = new List<Task>(3);
foreach (Item item in batch)
tasks.Add(Task.Factory.StartNew(() => ProcessItem(item)));
Task.WaitAll(tasks.ToArray());
batch.Clear();
}
stopwatch.Stop();
int elapsed = (int)stopwatch.ElapsedMilliseconds;
int delay = (3000) - elapsed;
if (delay > 0)
Thread.Sleep(delay);
}
}
ProcessItem 함수는 WebRequest 클래스를 만들고 응답 (콜백)을 처리합니다. 이것은 약간의 시간이 걸리는 기능입니다.
그러나 작업을 올바르게 이해하면 스레드가 여러 작업을 수행 할 수 있습니다. 따라서 스레드를 잠그면 다른 작업이 영향을받을 수 있습니다.
위를 달성하는보다 효율적인 방법이 있으며 Parallel.Foreach에서 작업을 사용할 수 있습니까? 사용
Task.Delay
전체 소스 코드가 포함 된 최종 해결책이 있습니까? – Kiquenet