我用
List.AsParallel().WithDegreeOfParallelism(3).ForAll(x => Worker(x));
在列表的每个元素上应用 Worker。
我如何命名运行 Worker 的线程,以便当每个 Worker(x) 线程终止时,VS 调试器告诉我:Thread <<for elem abcde>> terminated
,以便我可以区分线程?
我需要这个,因为程序会在一段时间后停止执行列表中的元素,并且线程会终止。
最佳答案
我正在使用 Thread.CurrentThread.ManagedThreadId
来查看正在重用哪个线程。
这个想法在下面的测试中显示:
[Test]
public void ThreadNamesTest()
{
var rnd = new Random();
var range = Enumerable.Range(0, 50);
var rangeBack = new Dictionary<int, int>();
var rangeBackLocker = new object();
range.AsParallel().AsOrdered()
.WithDegreeOfParallelism(4).ForAll(x =>
{
lock (rangeBackLocker)
{
rangeBack.Add(x, Thread.CurrentThread.ManagedThreadId);
}
Thread.Sleep(100 * rnd.Next(10));
});
Assert.AreEqual(rangeBack.GroupBy(x=>x.Value).Count(), 4);
}
关于c# - List.AsParallel() - 如何命名我的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5210278/