如何在C#中获取线程ID

11
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...


为什么你想知道那个? - svick
1个回答

18

Thread.CurrentThread.ManagedThreadId 可以获取正在执行的线程的托管线程 ID。

如果你想获取本地线程 ID(通常不需要这样做),可以调用方法 AppDomain.GetCurrentThreadId()(已过时,“因为在托管线程运行在纤维上时它不能提供稳定的 ID”,但据我所知,托管线程仅在 SQL Server 内部的纤维上运行)。


1
在上述情况下查找当前执行线程的线程ID,我必须在AsParallel().Any(item => {//here I guess//});中编写Thread.CurrentThread.ManagedThreadId。但是,该行不起作用,因为该行仅包含谓词。 - Recawo
1
@Recawo:但是你想做什么呢?无论如何,你都可以轻松地创建一个谓词来查询当前线程ID,可以将其包装成一个函数或者像这样内联编写item => { ... C#语句 ... ; return result; } - Martin Liversage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接