【问题标题】:How to get thread Id in C#如何在 C# 中获取线程 ID
【发布时间】:2012-04-19 09:16:18
【问题描述】:
public bool HasItemsFromPropertySet(InfoItemPropertySet propertySet, CompositeInfoItem itemRemoved)
    {
        var itemAndSubItems = new InfoItemCollection();
        if (itemRemoved != null)
        {
            itemAndSubItems.Add(itemRemoved);
            //foreach (InfoItem item in itemRemoved.AllDescendants)
            itemAndSubItems.AddRange(itemRemoved.AllDescendants);
        }
        return AllItems.AsParallel().Any(item => item.PropertySet == propertySet && !itemAndSubItems.Contains(item));
    }


在我的代码上方,我使用 AsParallel().Any() 我如何获取由 AsParellel.Any() 生成的线程的线程 ID...

【问题讨论】:

  • 你为什么想知道这个?

标签: c# task-parallel-library parallel-extensions


【解决方案1】:

Thread.CurrentThread.ManagedThreadId获取当前执行线程的托管线程ID。

如果您想获取本机线程 ID(不是您通常想要做的事情),您可以调用方法 AppDomain.GetCurrentThreadId()(已过时“因为当托管线程在光纤上运行时它不提供稳定的 ID”但是据我所知,托管线程仅在 SQL Server 内的纤程上运行)。

【讨论】:

  • 要在上述情况下查找当前正在执行的线程的线程 ID,我必须在 AsParallel().Any( item => {//这里我猜//}) 中编写 Thread.CurrentThread.ManagedThreadId;但是该行不起作用,因为该行仅包含谓词。
  • @Recawo:但你想做什么?无论如何,您可以轻松地创建一个查询当前线程 ID 的谓词,方法是把它包装到一个函数中,或者像 item => { ... C# statements ... ; return result; } 这样内联编写它。
猜你喜欢
  • 2011-11-17
  • 2021-08-14
  • 2014-02-01
  • 2010-10-29
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
相关资源
最近更新 更多