【发布时间】:2013-10-23 19:32:39
【问题描述】:
这是我的代码。在 startLog 方法中创建的日志文件具有从 1 到 1000 的正确计数,但由 log 方法创建的日志文件具有重复值。例如,如果重复 88,则缺少 89,下一个打印的数字是 90。谁能解释一下为什么会发生这种情况?
namespace TestThreading
{
public partial class Form1 : Form
{
NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
new Thread(startLog).Start();
}
private void startLog()
{
int i = 0;
string str;
while (i < 1000)
{
str = (++i).ToString();
logger.Trace(str);
Thread t = new Thread(() => log(new TestObject(str)));
t.Start();
}
MessageBox.Show("Done");
}
private void log(TestObject obj)
{
logger.Debug(obj.getCount());
}
}
public class TestObject
{
string count;
public TestObject(string i)
{
count = i;
}
public string getCount()
{
return count;
}
}
}
【问题讨论】:
-
Java 的好处是它根本不允许这样做。变量必须是最终的或实际上是最终的。
标签: c# .net multithreading