मैंने सी # 5 और नेट 4.5 में असीमित प्रोग्रामिंग सीखना शुरू किया और ऐसा कुछ है जो मुझे समझ में नहीं आता है।एसिंक्रोनस प्रोग्रामिंग और लूप में प्रतीक्षा करें
private static int count;
public static void Main()
{
LoopTest();
Console.ReadKey(false);
}
static async void LoopTest()
{
count = 0;
for (var index = 0; index < 10; ++index)
{
Console.WriteLine("({0}) In Loop before await, Index {1}, Thread: {2}", count++, index, Thread.CurrentThread.ManagedThreadId);
await Task.Factory.StartNew(() => Thread.Sleep(10));
}
}
परिणाम है:
(0) In Loop before await, Index 0, Thread: 9
(1) In Loop before await, Index 1, Thread: 10
(2) In Loop before await, Index 2, Thread: 11
(3) In Loop before await, Index 3, Thread: 10
(4) In Loop before await, Index 4, Thread: 11
(5) In Loop before await, Index 5, Thread: 10
(6) In Loop before await, Index 6, Thread: 12
(7) In Loop before await, Index 7, Thread: 11
(8) In Loop before await, Index 8, Thread: 10
(9) In Loop before await, Index 9, Thread: 12
तो वहाँ अलग अलग ही पाश तक पहुँचने धागे कर रहे हैं? इंडेक्स वैरिएबल पर रेस-कंडीशन है?
कृपया प्रतीक्षा करें टास्क.फैक्टरी.स्टार्टन्यू (() => थ्रेड। स्लीप (10)); कार्य का इंतजार कर रहे हैं। डेले (10)। आपको अपने धागे को 10 एमएस के लिए जाने देना है, इसे पकड़ना नहीं है। –
@publicENEMY तो 'कार्य। डेले' करता है;) –
@ टोनीपेट्रिना थ्रेड। 10 मीटर धागे के उपयोग को अनुकरण करने के लिए नींद को पकड़ने के लिए उपयोग किया जाता है। –