चलो कहते हैं कि मैं दो स्वतंत्र async कार्य होते हैं (है कि मैं पर नियंत्रण नहीं है) कि टास्क वस्तुओं बनाएँ:स्वतंत्र सी # कार्यों को कैसे श्रृंखलाबद्ध करें?
Task A();
Task B();
और कुछ अन्य गैर async समारोह
void X();
मैं कैसे एक भी निर्माण करते हैं कार्य श्रृंखला जो इन सभी को अनुक्रम में निष्पादित करती है और संलग्न होने के लिए आगे की निरंतरता (जो एक्स के बाद निष्पादित) की अनुमति देती है?
मैं ऐसा करते हैं तो:
Task Sequential()
{
return A()
.ContinueWith(t => { B(); })
.ContinueWith(t => { X(); });
}
वह काम नहीं करता, क्योंकि बी एक नया टास्क श्रृंखला शुरू कर देंगे। यदि बी को पूरा करने में लंबा समय लगता है, तो एक्स पहले निष्पादित किया जाएगा (साथ ही अनुक्रमिक के कॉलर जारी किए जा सकने वाले कार्य के साथ जारी रख सकते हैं)। मुझे बी कार्य को इसके उदाहरण के रूप में, एक कार्य श्रृंखला में अंतिम तत्व होने की आवश्यकता है।
मैं ऐसा करते हैं तो:।
Task Sequential()
{
return A()
.ContinueWith(t => { B().ContinueWith(t => { X(); }); });
}
कि केवल आंशिक रूप से समस्या का हल है, क्योंकि भले ही ए, बी और एक्स अब अनुक्रमिक क्रम में निष्पादित करेंगे, अगर फोन करने वाले अनुक्रमिक() ContinueWith करता है, कि निरंतरता एक्स और 0 के बाद समानांतर में निष्पादित होगा,
एलेक्स के जवाब जिस तरह से आप जाना चाहता हूँ है। लेकिन आपके उद्देश्यों के लिए, जो आप पूरा करने की कोशिश कर रहे हैं उसे एक वादे के उपयोग की आवश्यकता होगी (जो 'कार्य पूर्णीकरण स्रोत' सेवा करता है)। –
'टास्क। वैटएल (ए(), बी()) नहीं है। जारी रखें (टी => एक्स()) 'एक विकल्प, यदि आप कहते हैं कि' ए' और 'बी' स्वतंत्र हैं? – VMAtm
@VMAtm, आपका मतलब है 'कार्य। जब सभी'। –