2012-02-23 18 views
12

Hata ayıklama yaparken adlandırma iş parçacıklarının çok yararlı olduğunu buluyorum.Görev çalıştıran bir iş parçacığı nasıl adlandırılır?

Ben yüzden görev açıkça iplik isim kabul edilebilir Task.Factory.StartNew()

argümanlar kullanarak bir iş parçacığı isim hiçbir şekilde görebilir? örneğin:

private void MyFunc() 
{ 
    Task.Factory.StartNew(() => 
    { 
     Thread.CurrentThread.Name = "Foobulizer"; 
     Foobulize(); 
    }); 
} 

Ancak, ben ipler farklı görevler için yeniden takdir, bu yüzden açıkça görevin sonunda iplik adını sıfırlamak gerekir? Bu oldukça berbat hissediyor, bu yüzden muhtemelen bunun kötü bir fikir olduğunu düşünüyorum, ya da bunu yapmak için uygun bir yol var mı?

cevap

14

Birden çok Görev tek veya çok sayıda iş parçacığını paylaşabileceğinden, bunu belirli bir zamanda ThreadPool durumuna bağlı olduğundan bunu yapamazsınız. Temel olarak Görev bir Konu değildir, bu asenkron çalışma için sadece yüksek seviyeli bir soyutlamadır. özelliğini kullanabilirsiniz, ancak Id öğesinin int türünde olduğunu ve bu nedenle özel kullanıcı dostu bir ad atayamayacağınızı unutmayın.

Görev kimlikleri on-demand atanır ve mutlaka size belki Visual Studio inşa 2010 Paralel hata ayıklama özellikleri bir göz atın

oluşturuldukları Görev durumlarda düzeni temsil etmemektedir Walkthrough: Debugging a Parallel Application

Paralel Görevler Penceresi:

enter image description here

'bir başka yaklaşım bulacaksınız Görevi çalıştıran her biri için

, sen aynı adlı özelliği tarafından döndürülen kendi kimliğini, onu çalıştırır iş parçacığı kimliği ve adı, o üzerine gelerek onun konumu (okuma olan bir araç ipucu görüntülenir olabilir tüm çağrı yığını). Ayrıca, Görev sütununun altında, 'un göreve aktarıldığı yöntemi görebilirsiniz; diğer bir deyişle, başlangıç ​​noktası

+0

İlgili Görev Eyleminde veya yöntemde kodu "Task.CurrentId" olarak kullanabilirsiniz. –

5

varsayılan TaskScheduler görevleri planlamak için .NET ThreadPool kullanır. Yani zaten var olan veya yeniden kullanılacak bir konu (hem potansiyel hem de olası) alacaksınız.

Yalnızca bir iş parçacığı adlandırabileceğinizi unutmayın. Thread.CurrentThread.Name numaralı telefonu aramaya yönelik ikinci deneme, InvalidOperationException'u yükseltecektir. Bu bir iş parçacığı havuzu iş parçacığı olduğunda özellikle kötüdür.

Genel olarak, (açık bir şekilde) oluşturmadığınız veya sahip olmadığınız bir iş parçacığı özniteliklerini değiştirmemelisiniz (bir isim, priority diğer önde gelen adaylar).

+0

Sadece bir kez adlandırabileceğinizi bilmiyordum. İlginç, teşekkürler. – GazTheDestroyer

-1

Elbette, işiniz bittiğinde tekrar Adınızı tekrar kaldırabilirsiniz. iplik ismini tekrar "Rölanti" cevher dizgisine ayarlayın. Foobulize();

+0

Bu yanlıştır, Thread.Name öğesini bir defadan fazla ayarlayamazsınız. –

İlgili konular