【发布时间】:2010-11-09 13:38:26
【问题描述】:
有什么区别:
new Thread(new ThreadStart(SomeFunc))
和:
new Thread( delegate() { SomeFunc();} )
这段代码在我的电脑上给出了奇怪的输出:
public class A
{
int Num;
public A(int num)
{
Num = num;
}
public void DoObj(object obj)
{
Console.Write(Num);
}
public void Do()
{
Console.Write(Num);
}
}
/////// in void main()
for (int i = 0; i < 10; i++)
{
(new Thread(new ThreadStart((new A(i)).Do))).Start(); // Line 1
(new Thread(new ThreadStart(delegate() { (new A(i)).Do(); }))).Start(); // Line 2
(new Thread(delegate() { (new A(i)).Do(); })).Start(); // Line 3
}
如果只执行第 1 行,则输出类似于:
0 2 3 1 5 6 4 7 8 9
没关系,但是如果执行第 2 行或第 3 行,输出是:
3 3 3 5 5 7 7 9 9 10
有一些多个数字和一个 10,这很奇怪,循环永远不会以数字 10 运行。这些背后的技巧是什么?
谢谢。
【问题讨论】:
-
阅读本节:albahari.com/threading/#_Passing_Data_to_a_Thread,阅读Lambda 表达式和捕获的变量
标签: c# multithreading delegates