6

एक तरह से एक रद्द टोकन पारित करने के लिए है:विधि वीएस कार्य कन्स्ट्रक्टर को कॉल करने के लिए रद्दीकरण टोकन पास करना?

/* Cancellation token passed as method parameter */ 
Task task = Task.Run(() => { LongTask(1000000, cancellationToken.Token); }); 

एक और तरीका है:

/* Cancellation Token passed as task constructor */ 
Task task = Task.Run(() => { LongTask(1000000); }, cancellationToken.Token); 

क्या अंतर है?

उत्तर

6

पहला आपकी विधि के लिए एक टोकन पास करता है, जहां आप इसके साथ जो चाहते हैं वह कर सकते हैं। दूसरा टोकन Task.Run पर भेजता है जो उस टोकन के साथ कार्य को जोड़ता है।

चूंकि .NET में रद्दीकरण सहकारी Task.Run केवल आपके कार्य को रद्द कर सकता है अगर उसने अभी तक निष्पादन शुरू नहीं किया है (जो कि उपयोगी नहीं है) और आपकी विधि समय-समय पर टोकन की जांच कर सकती है और रद्दीकरण को फेंक सकता है अनुरोध किया है लेकिन यह रद्द करने के बजाए कार्य को दोष के रूप में चिह्नित करेगा।

एक पूर्ण समाधान आप वास्तव में दोनों को क्या करना चाहिए के लिए:

var task = Task.Run(() => LongTask(1000000, cancellationToken), cancellationToken); 

इस तरह काम टोकन साथ जुड़ा हुआ है और आप रद्द करने के लिए टोकन देख सकते हैं।

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