मान लीजिए कि आप गणना किसी तरह का प्रदर्शन करने के लिए कुछ कार्यकर्ता धागे शुरू करने के लिए, और तब सभी परिणामों के साथ बाद में कुछ करना चाहते हैं।
List<Thread> workerThreads = new List<Thread>();
List<int> results = new List<int>();
for (int i = 0; i < 5; i++) {
Thread thread = new Thread(() => {
Thread.Sleep(new Random().Next(1000, 5000));
lock (results) {
results.Add(new Random().Next(1, 10));
}
});
workerThreads.Add(thread);
thread.Start();
}
// Wait for all the threads to finish so that the results list is populated.
// If a thread is already finished when Join is called, Join will return immediately.
foreach (Thread thread in workerThreads) {
thread.Join();
}
Debug.WriteLine("Sum of results: " + results.Sum());
ओह, हाँ, और इस तरह यादृच्छिक का उपयोग नहीं करते, मैं सिर्फ एक न्यूनतम, आसानी से समझ में उदाहरण लिखने की कोशिश कर रहा था। यह वास्तव में यादृच्छिक नहीं होता है अगर आप नए रैंडम उदाहरणों को बहुत करीब बनाते हैं, क्योंकि बीज घड़ी पर आधारित होता है।
स्रोत
2010-12-20 00:26:36
आपको 'int value = i;' जैसे कुछ जोड़ने की आवश्यकता है एक नए थ्रेड में शामिल होने से पहले फूर-लूप में। क्योंकि थ्रेड शुरू होने से पहले 'मैं' बढ़ रहा है और योग गैर-निर्धारक होगा। –