Sco*_*ach 6 c# multithreading locking
我有以下代码:
var items = new List<string> {"1", "2", "3"}; // 200 items
foreach(var item in items) {
ThreadPool.QueueUserWorkItem((DoWork), item);
}
private void DoWork(object obj)
{
lock(this)
{
using(var sw = File.AppendText(@"C:\somepath.txt")
{
sw.WriteLine(obj);
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于线程,出于某种原因,我得到了写入文件的200个项目的随机数.60或127或有时只有3.如果我删除ThreadPool并只在原始foreach循环内写入,则所有200个项目都会成功写入.
不知道为什么会这样?
谢谢你的帮助.
MSDN文档中ThreadPool的以下注释说明了这一切:
托管线程池中的线程是后台线程.也就是说,他们的
IsBackground属性是真的.这意味着ThreadPool在所有前台线程退出后,线程不会保持应用程序运行.
您的应用程序只是Main在线程完成运行之前退出(到达结尾).
| 归档时间: |
|
| 查看次数: |
1924 次 |
| 最近记录: |