我試圖在我的應用程序中實現任務。linq lambda在循環中如何工作?
這裏的示例代碼:
有一個簡單的接口I,3類衍生自它(A,B,C) 創建是列表,以A,B,C的實例poplualte它,然後爲對方創建一個任務來調用方法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
我還挺發現在調試問題:所有任務具有相同委託,但我不知道爲什麼以及如何解決此問題。
感謝您的解釋。 「複製」真的是一個副本嗎?據我所知,這只是另一個參考,賴特? – 2010-09-26 10:46:47
@portland:它是'i' *的*值的副本,無論這個值是...無論它是一個引用還是一個值類型值。 – 2010-09-26 11:11:24