Дано 10 изображений и команда, например, из 2 человек. Первый обрабатывает изображение за 1 минуту, второй за 2. Сколько времени занимает обработка?
Я создаю двух человек с более низкими значениями в секундах. И я вызываю метод process.
Вам нужно вызывать два метода для разных объектов параллельно. Первый работает быстрее второго. Доступна общая переменная с количеством изображений, которая изменяется после обработки тем или иным потоком.
Конечно, ничего не работает. Я попытался .WhenAll
, это не сработало.
Это должно быть около 7,5 секунд, а не 14. 
Main:
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Test.Controller;
using Test.View;
using Test.Model;
namespace Test
{
class Program
{
static async Task Main(string[] args)
{
Person person1 = new Person(1000);
Person person2 = new Person(2000);
List<Person> people = new List<Person> { person1, person2 };
int images_amount = 10;
int time_processing = await ProcessingImages.ExecuteAsync(images_amount, people);
TimeProcessing.TimeExecute(time_processing);
}
}
}
Контроллер:
using System;
using System.Threading;
using System.Collections.Generic;
using System.Threading.Tasks;
using Test.Model;
namespace Test.Controller
{
class ProcessingImages
{
static async public Task<int> ExecuteAsync(int images_amount, List<Person> people, int time_processing = 0)
{
List<Task> tasks = new List<Task>();
foreach (Person p in people)
{
tasks.Add(Task.Run(() => Execute(ref images_amount, p.Speed)));
}
await Task<int>.WhenAll(tasks);
foreach (Task<int> task in tasks)
{
time_processing += await task;
}
return time_processing;
}
static private int Execute(ref int images_amount, int seconds_per_image, int count = 0)
{
while (images_amount > 0)
{
images_amount--;
count += seconds_per_image;
Console.WriteLine("Start thread " + seconds_per_image);
Thread.Sleep(seconds_per_image);
}
return count;
}
}
}
Вид:
using System;
namespace Test.View
{
class TimeProcessing
{
static public void TimeExecute(int time_processing)
{
Console.WriteLine("Total time processing: {0} seconds", time_processing);
}
}
}