2012-04-19 11 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)); 
    } 


powyżej w moim kodu używam AsParallel(). Obojętnie() Jak mogę uzyskać identyfikator wątku nici generowanego przez ten AsParellel.Any() ...Jak uzyskać identyfikator wątku w C#

+0

Dlaczego chcesz to wiedzieć? – svick

Odpowiedz

11

Thread.CurrentThread.ManagedThreadId otrzymuje identyfikator zarządzanego wątku bieżącego wątku.

Jeśli chcesz uzyskać natywny identyfikator wątku (nie jest to coś, co zwykle chcesz zrobić), możesz wywołać metodę AppDomain.GetCurrentThreadId() (przestarzałe "ponieważ nie zapewnia stabilnego identyfikatora, gdy wątki zarządzane są uruchomione na włóknach", ale jako o ile wiem, zarządzane wątki działają tylko na włóknach w SQL Server).

+1

Aby znaleźć identyfikator wątku aktualnie wykonywanego wątku w powyższym przypadku, muszę napisać Thread.CurrentThread.ManagedThreadId wewnątrz AsParallel(). Any (item => {// tutaj chyba //}); ale linia ta nie działa, ponieważ ta linia zawiera tylko predykat. – Recawo

+1

@Recawo: Ale co chcesz zrobić? W każdym razie, możesz łatwo utworzyć predykat, który zapytuje bieżący identyfikator wątku przez zawinięcie go do funkcji lub zapisanie go w linii, jak te 'item => {... C# instrukcje ...; wynik zwrotu; } '. –