基本多线程代码无法按预期工作

时间:2015-08-13 19:07:17

标签: c# multithreading

我是多线程的新手,我用一个非常简单的代码获得了意想不到的结果:

SELECT * FROM fts_table WHERE fts_table MATCH 'A:XXX OR B:YYY'

有人可以解释为什么上面的代码会将其打印到控制台窗口吗?

线程#3

线程#3

线程#3

线程#6

线程#6

线程#8

线程#9

线程#10

线程#11

线程#11

2 个答案:

答案 0 :(得分:4)

这是因为您正在使用closes over the loop variable的lambda。

重构您的代码:

public void Run()
{
    for (int i = 0; i < 10; i++)
    {
        int j = i;
        Thread t = new Thread(() => myFun((j + 1)));
        t.Start();
    }
}

private void myFun(int threadNo)
{
    Console.WriteLine("Thread #" + threadNo.ToString());
}

并享受变化。

答案 1 :(得分:0)

你可以像Jesse建议的那样在循环中使用“local”变量,或者你可以改为使用参数化的start(ParameterizedThreadStart):

...
\section{Section}

<<echo=FALSE, results="asis">>=
for (i in 1:3) {
  # here I want to insert a subsection with a title contating for instance x^i
  plot(i:(i*10), col=i) 
}
@
...