2012-04-19 108 views
5
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()。任何() 我怎样才能通过AsParellel.Any()生成的线程的线程ID ...如何获得线程ID在C#

+0

为什么你想知道这一点? – svick 2012-04-19 12:00:59

回答

11

Thread.CurrentThread.ManagedThreadId获取当前正在执行的线程的托管线程标识。

如果您想要获取本机线程标识(而不是您通常希望执行的操作),则可以调用方法AppDomain.GetCurrentThreadId()(由于在托管线程在光纤上运行时不提供稳定标识,而是作为“据我所知托管线程只在SQL Server内部的光纤上运行)。

+1

在上面的例子中,为了找到当前正在执行的线程的Id,我必须在AsParallel()中写入Thread.CurrentThread.ManagedThreadId(任何(item => {// here I guess //});但该行不起作用,因为该行只包含谓词。 – Recawo 2012-04-19 11:01:06

+1

@Recawo:但是你想要做什么?无论如何,你可以很容易地创建一个谓词来查询当前的线程ID,或者通过将它包装到一个函数中,或者像这样写入内联函数:item => {... C#statements ...;返回结果; }'。 – 2012-04-19 11:57:15