मैं async/await
के साथ खेल रहा था जब मैं निम्नलिखित भर में आया था:टास्क <T> .Result और स्ट्रिंग संयोजन
class C
{
private static string str;
private static async Task<int> FooAsync()
{
str += "2";
await Task.Delay(100);
str += "4";
return 5;
}
private static void Main(string[] args)
{
str = "1";
var t = FooAsync();
str += "3";
str += t.Result; // Line X
Console.WriteLine(str);
}
}
मैं परिणाम की उम्मीद "12345" हो सकता है, लेकिन यह "1235"। किसी तरह '4' खाया गया था।
int i = t.Result;
str += i;
तो उम्मीद "12345" परिणाम:
अगर मैं में लाइन एक्स अलग हो गए।
ऐसा क्यों है? (वीएस2012 का उपयोग)
क्यों निश्चित रूप से दिलचस्प है, लेकिन यह भी ध्यान दिया जाना चाहिए यदि आप ऐसा नहीं करना चाहिए - संचालन है कि कोई ताले या अन्य सूत्रण तर्क के साथ परमाणु अनिश्चित स्थितियों में आप प्राप्त करने के लिए निश्चित है नहीं कर रहे हैं के साथ एक चर को साझा किया था। –