2012-12-13 12 views
22

मैं विभिन्न कार्यों के लिए एक टोकन है और मैं बेहतर उनके रद्द करने के प्रबंधन के लिए, एक रद्द करने की सूचना प्राप्त करना मैं उपयोग कर सकते हैं की जरूरत है:CancellationToken पंजीकरण रद्द कार्रवाई

token.Register(RegisterMethod); 

मैं इस "सदस्यता" कैसे निकाल सकते हैं? क्या "UnRegister" का कोई तरीका है?

मैंने टास्क कॉम्प्लिशनसोर्स के साथ कामकाज करने के बारे में सोचा। लेकिन मुझे नहीं पता कि यह अच्छी तरह से काम करेगा या नहीं। इस दृष्टिकोण को हल करने का सबसे अच्छा तरीका क्या है?

+0

इन 2 लिंक की या तो आप http://social.msdn.microsoft.com/Forums/en-US/parallelextensions/thread/c2f614f6-c96c-4821-84cc-050b21aaee45 http में मदद मिलेगी। कॉम/प्रश्न/52 99 0 9 3/रद्दीकरणटोकेंससोर्स-कैनफेलसे – MethodMan

+0

यह मदद करता है लेकिन मेरी समस्या का समाधान नहीं करता है। –

उत्तर

45

CancellationToken.RegisterCancellationTokenRegistration उदाहरण देता है। यदि आप उस उदाहरण पर Dispose पर कॉल करते हैं, तो आपका पंजीकरण हटा दिया जाएगा।

+0

इसे याद किया था, धन्यवाद। हालांकि यह अच्छा होगा अगर यह सीधे टोकन पर किया जा सकता है .. –

0

पंजीकरण को पूर्ववत करने का कोई तरीका नहीं है।

var cancellationTokenSource = new CancellationTokenSource(); 

basicTask = Task.Factory.StartNew(() => { 
for (;;) { 
    var z = DateTime.Today.ToString(); 
} 
}, cancellationTokenSource.Token); 

var basicTask2 = Task.Factory.StartNew(() => { 
for (;;) { 
    var z = DateTime.Today.ToString(); 
} 
}, cancellationTokenSource.Token); 

//var usingThisCodeWillResultInADeadlock = cancellationTokenSource.Token.Register(() => { }); 
//usingThisCodeWillResultInADeadlock.Dispose(); 
cancellationTokenSource.Cancel(); 
basicTask.Wait(); 

टिप्पणियों को अक्षम एक गतिरोध में परिणाम होगा: निपटाने विधि कॉलबैक निकाल देंगे जबकि टोकन अभी भी जानकारी एक पंजीकरण है कि वहाँ मौजूद हैं। // stackoverflow:

+3

मुझे यकीन नहीं है कि आप क्या दिखाना चाहते हैं - आपका 'मूल टास्क 2' अप्रयुक्त है, आपके 'मूल टास्क' में अनंत लूप है, इसलिए कोई फर्क नहीं पड़ता कि आप क्या रोक नहीं सकते इसे या रद्द करें, और आप उस कार्य की प्रतीक्षा करें जो (परिभाषा के अनुसार) कभी समाप्त नहीं होता है। उन 2 लाइनों को कम करने से कोई चीज़ नहीं बदली है। – greenoldman

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