Я пытаюсь реализовать Задачи в своем Приложении.
Вот пример кода:
Есть один простой интерфейс I, из него получено 3 класса (A, B, C)Я создаю список Is, наполняю его экземплярами A, B, C, а затем создаю для друг друга задачу для вызова метода do1 ();
interface I
{
void do1();
}
class A : I
{
public void do1()
{
Console.WriteLine("A");
}
}
class B : I
{
public void do1()
{
Console.WriteLine("B");
}
}
class C : I
{
public void do1()
{
Console.WriteLine("C");
}
}
class Program
{
public static void Main(string[] args)
{
List<I> l = new List<I>();
l.Add(new A());
l.Add(new B());
l.Add(new C());
var TaskPool = new List<Task>();
foreach (var i in l)
{
Task task = new Task( () => i.do1()
);
TaskPool.Add(task);
}
foreach (var c in TaskPool)
{
c.Start();
}
Thread.Sleep(3000);
Console.Read();
}
}
Я ожидаю увидеть
A
B
C
В выводе, но вместо него я получаю
C
C
C
Я вроде нашел проблему в отладчике: у всех задач один и тот же делегат, но я не знаю, почему и как обойти этоэтот.