c# - List.AsParallel() - 如何命名我的线程?

标签 c# multithreading

我用

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/

相关文章:

c++ - VC++ 仍然在顺序一致方面被破坏吗?

c# - 具有命名空间限制的通用类型

java - 修改线程内的父类变量

c# - 使用反射和枚举来进行 MVC 应用程序访问的逻辑控制是否安全?

c# - LinqToSql 中的 Xml 查询

c++ - 将抽象重写方法传递给 Boost::Thread

c# - 完成后计时器重新启动功能

Java : updates to variables before and after Thread. 开始()

c# - 根据从 SFTP 修改的日期下载文件

c# - 无法将json解析成对象