एक फ़ंक्शन को कॉल करें और C # में इसके लिए कभी प्रतीक्षा न करें


26

मेरे mvc4 वेब एप्लिकेशन में एक नियंत्रक है जिसमें एक क्रिया है जिसे दूसरे फ़ंक्शन को कॉल करने की आवश्यकता है। उस फ़ंक्शन में क्या होता है यानी रिटर्न एक्शन मेरे एक्शन के लिए महत्वपूर्ण नहीं है। मैं उस फ़ंक्शन को कैसे कॉल कर सकता हूं और कभी भी इसके निष्पादित होने की प्रतीक्षा नहीं कर सकता हूं?

मुझे लगता है कि यह async द्वारा किया जा सकता है, लेकिन मेरा कहना है कि संसाधनों का उपयोग न करें, बस फ़ंक्शन को कॉल करें और कभी भी इसका इंतजार न करें कि क्या होता है।

कृपया मुझे कुछ सलाह दें।



एकमात्र तरीका जो आप कर सकते हैं वह है इसे दूसरे धागे से पास करना। संसाधनों के बिना किसी फ़ंक्शन को कॉल करने जैसी कोई चीज नहीं है, जब तक कि आप बस इसे एक नो-ऑप चाहते हैं।
रॉबर्ट हार्वे

धन्यवाद, मेरा मतलब है कि सबसे अच्छा और अनुकूलित तरीका क्या है, मुझे लगता है कि सबसे अच्छा तरीका टास्क है। MVC में WebApi का उपयोग करना, @ user814064 उल्लेख किए गए लिंक के आधार पर, शायद मैं सिर्फ एक जावास्क्रिप्ट समाधान का उपयोग कर सकता हूं, लेकिन मुझे लगता है कि ऐसा नहीं है पेशेवर!
user2675751

जवाबों:


40
private void Demo()
{
    // Do something, given that the result doesn't matter.
}

public void Do()
{
    Task.Factory.StartNew(this.Demo);

    // The following line will be executed without waiting for the result.
    DoSomethingElse();
}

ध्यान दें कि परिणाम के बारे में परवाह किए बिना या इसे फेंकने वाले अपवादों के बारे में एक विधि शुरू करना जोखिम भरा है।

यदि एक अपवाद को एक में फेंक दिया जाता है Task, तो यह तब तक छिपा रहेगा जब तक आप:

  1. परिणाम का निरीक्षण करें,
  2. Wait() कार्य के लिए, या:
  3. GC अंतिम पर कॉल करता है Task

आप विधि को कॉल करने के कुछ ही समय बाद अपने आप को 1. और 2. संभाल सकते हैं, या myTask.OnComplete(myErrorHandler, TaskContinuationOptions.OnlyOnFaulted)जब मूल कार्य एक अपवाद को फेंक देता है , तो आप इसे चालू रखने के साथ संलग्न कर सकते हैं । 3. आपकी प्रक्रिया को क्रैश कर देगा; ऐसा मत करो।


3
क्या आप "3. का विस्तार कर सकते हैं, जो आपकी प्रक्रिया को ध्वस्त कर देगा; ऐसा न करें"। क्या यह स्वचालित रूप से नहीं किया गया है?
rdans
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.