2013-03-22 17 views
13

मैं कुछ फ़ंक्शन रिटर्निंग स्ट्रिंग में कुछ एसिंक ऑपरेशन करने का प्रयास कर रहा हूं।Await/async संदर्भ त्रुटि

async private void button1_Click(object sender, EventArgs e) 
{ 
    string output = await thr_calc(this, null); 
} 

async private Task<string> thr_calc(object sender, EventArgs e) 
{ 
    return await zzztest();    
} 

string zzztest() 
{ 
    string asd; 
    //some stuff here 
    return asd; 
} 

लेकिन यह मुझे प्रत्येक स्ट्रिंग पर त्रुटियों को देता है जैसे शब्दों async/await! मैं विंडोज़ डेस्कटॉप के लिए एमएस बनाम एक्सप्रेस 2012 के रूसी संस्करण का उपयोग कर रहा हूं, इसलिए यहां त्रुटियों का अनुवाद है:

'async' संशोधक द्वारा आवश्यक सभी प्रकारों को नहीं ढूंढ सकता। क्या आप गलत फ्रेमवर्क संस्करण को लक्षित कर रहे हैं, या किसी असेंबली के संदर्भ को याद कर रहे हैं?

और 2 त्रुटियों:

पूर्वनिर्धारित प्रकार 'System.Runtime.CompilerServices.IAsyncStateMachine' परिभाषित या आयात नहीं किया जाता

मैं नहीं कर सकते कि संदर्भ पाते हैं। मैंने पहले async/प्रतीक्षा करने का प्रयास किया है और यह ठीक काम करता है, अब मैं वही कर रहा हूं और इसकी नहीं। मुझे क्या याद आ रहा है

+0

मैं आपको रूसी भाषा पर कॉपी-पेस्ट त्रुटियां दे सकता हूं, क्या वे आपकी मदद करेंगे? –

+1

क्या आप फ्रेमवर्क 4.5 का उपयोग कर रहे हैं? –

+0

हाँ, फ्रेमवर्क 4.5 –

उत्तर

16
  • thr_calc में, का उपयोग करें:

    return zzztest() 
    
  • इसके अलावा, सुनिश्चित करें कि आप अपनी परियोजना नेट 4.5 या बाद में (यह है कि जब "async" पेश किया गया था है)

उपयोग करने के लिए निर्धारित किया है बनाना
+0

हाँ लेकिन एक ही –

+3

त्रुटियों में यह अजीब बात है, क्योंकि यह मेरे लिए संकलित है। क्या आपने "एप्लिकेशन" के तहत परियोजना के गुणों के तहत जांच की है, कि ढांचा 4.5 है? – redtuna

+0

(यह एक बार जब मैं asd को मान निर्दिष्ट करता हूं तो यह संकलित करता है, लेकिन मुझे यकीन है कि आपको उस संकलन त्रुटि को ठीक करने में कोई समस्या नहीं होगी) – redtuna

1

हैं zzztest एक लंबे चल रहा आपरेशन है, तो आप एक पृष्ठभूमि सूत्र में इसे चलाने के लिए ऐसा कर सकते हैं:

async private Task<string> thr_calc(object sender, EventArgs e) 
{ 
    return await Task.Run<string>(() => zzztest());    
} 

उपर्युक्त आपकी संकलन त्रुटियों को भी हल करना चाहिए।

यदि zzztest एक लंबे समय तक चलने वाला ऑपरेशन नहीं है, तो await/async का उपयोग न करने पर विचार करें।

7

एक .NET 4.0 प्रोजेक्ट पर, मैंने 'पूर्वनिर्धारित प्रकार' सिस्टम का समाधान किया। Runtime.CompilerServices.IAsyncStateMachine को nuget से Microsoft.Bcl.Async पैकेज को स्थापित करके परिभाषित या आयात नहीं किया गया है। वीएस के न्यूजेट पैकेज मैनेजर में, 'बीसीएल' की खोज करें और एसिंक दिखने वाले को इंस्टॉल करें।

संबंधित मुद्दे