필자는 병렬로 실행할 작업 목록을 제한된 방식으로 가지고 있는데, 관리하지 않고도 배치 작업과 거의 같습니다. 내 접근 방식은 Parallel.ForEach 및 ParallelOptions의 MaxDegreeOfParallelism 속성을 사용하는 것이 었습니다. 나는 값을 설정하는 것에 상관없이 모든 작업이 동시에 시작된다는 것을 알았습니다. 이것은 바람직하지 않은 동작입니다. 나는 동시에 실행되는 작업의 양이 속성과 같기를 바란다. 내가 그림MaxDegreeOfParallelism 작업 목록에 적용되지 않습니까?
class Program
{
static void Main(string[] args)
{
var numbers = Enumerable.Range(1, 5);
var tasks = new List<Task>();
foreach (int number in numbers)
{
tasks.Add(new Task(() => {Console.WriteLine("Starting thread {0} at time {1}. Starting delay...", Thread.CurrentThread.ManagedThreadId, DateTime.Now);
Thread.Sleep(1000);
Console.WriteLine("{0} is done at {1}.", Thread.CurrentThread.ManagedThreadId, DateTime.Now);}));
}
Parallel.ForEach(tasks, new ParallelOptions() { MaxDegreeOfParallelism = 2 }, t =>
{
t.Start();
});
Task.WaitAll(tasks.ToArray());
}
}
내 접근하거나 이해가 잘못된는?
설명서 및 기타 몇 가지 질문을 읽은 후에 - 이해를 공유 했으므로 작동해야합니다. 나는 누군가가 대답을 알기를 바랍니다, 이것은 잠시 나를 괴롭힐 것입니다. – zmbq
안녕 Seapoe, MaxDegreeOfParallelism 동시에 실행할 수있는 스레드 수에 영향을줍니다. 각 스레드가 시작될 때를 결정하지는 않습니다. – Riv