में एक नया धागा शुरू करना मेरे पास ऑब्जेक्ट्स की एक सूची है और मैं उस सूची पर लूप करना चाहता हूं और वर्तमान ऑब्जेक्ट में गुजरने वाला एक नया थ्रेड शुरू करना चाहता हूं।फ़ोरैच लूप
मैंने एक उदाहरण लिखा है जो मैंने सोचा था कि यह क्या करना चाहिए, लेकिन यह काम नहीं कर रहा है। विशेष रूप से, ऐसा लगता है जैसे थ्रेड प्रत्येक पुनरावृत्ति पर ओवरराइट हो रहे हैं। यह वास्तव में मुझे समझ में नहीं आता है क्योंकि मैं हर बार एक नया थ्रेड ऑब्जेक्ट बना रहा हूं।
यह परीक्षण कोड मैंने लिखा
class Program
{
static void Main(string[] args)
{
TestClass t = new TestClass();
t.ThreadingMethod();
}
}
class TestClass
{
public void ThreadingMethod()
{
var myList = new List<MyClass> { new MyClass("test1"), new MyClass("test2") };
foreach(MyClass myObj in myList)
{
Thread myThread = new Thread(() => this.MyMethod(myObj));
myThread.Start();
}
}
public void MyMethod(MyClass myObj) { Console.WriteLine(myObj.prop1); }
}
class MyClass
{
public string prop1 { get; set; }
public MyClass(string input) { this.prop1 = input; }
}
है
मेरी मशीन पर उत्पादन
test2
test2
है, लेकिन मैं यह उम्मीद
test1
test2
होने के लिए मैं धागा लाइनों को बदलने की कोशिश की
ThreadPool.QueueUserWorkItem(x => this.MyMethod(myObj));
लेकिन धागे में से कोई भी शुरू नहीं हुआ।
मुझे लगता है कि मुझे केवल गलतफहमी है कि धागे कैसे काम करते हैं। क्या कोई मुझे सही दिशा में इंगित कर सकता है और मुझे बता सकता है कि मैं क्या गलत कर रहा हूं?
आपका जीवन हो जाएगा यदि आप .NET 3.5 में समांतर समांतर एक्सटेंशन लाइब्रेरी को देखते हैं तो बहुत आसान है। शुरू करने के लिए यहां एक स्थान दिया गया है: http://msdn.microsoft.com/en-us/library/dd460693%28VS.100%29.aspx – DOK
http://www.albahari.com/threading/ –