C# अकादमी · पाठ

CancellationToken patterns; cooperative cancel

CancellationToken पास करें और उसका सम्मान करें: CTS बनाएँ, cancellation के लिए poll/throw करें, async APIs को पास करें और registrations के साथ cleanup करें।

पाठ 1, कुल 3 में से8 चरण

CancellationToken patterns; cooperative cancel, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 3 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 3 पाठ शामिल हैं।

सहयोगात्मक रद्दीकरण

उद्देश्य: work को सहयोगात्मक रूप से रद्द करना।

  • CancellationTokenSource बनाएँ
  • CancellationToken को आगे भेजें
  • IsCancellationRequested जाँचें या ThrowIfCancellationRequested() कॉल करें
  • रद्दीकरण के अनुरोध का तुरंत और व्यवस्थित ढंग से पालन करें

कॉलकर्ता-नियंत्रित रद्दीकरण

CancellationTokenSource बनाएँ, टोकन आगे भेजें और कॉलकर्ता से रद्दीकरण करें; जिस विधि को कॉल किया गया है वह OperationCanceledException फेंकती है।

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
  static async Task WorkAsync(CancellationToken ct)
  {
    // Poll occasionally; throw to end cooperatively
    for (int i = 0; i < 5; i++)
    {
      ct.ThrowIfCancellationRequested();
      Console.WriteLine("Step " + i);
      await Task.Delay(100, ct); // pass token to async API
    }
  }

  public static void Main(string[] args)
  {
    var cts = new CancellationTokenSource();
    Task t = WorkAsync(cts.Token);

    // Cancel after a short delay (simulated user action)
    Thread.Sleep(180);
    cts.Cancel();

    try
    {
      t.GetAwaiter().GetResult();
    }
    catch (OperationCanceledException)
    {
      Console.WriteLine("Canceled!");
    }
  }
}

टोकन आगे भेजना

हर async परत में टोकन को आगे भेजें, ताकि भीतरी कॉल तुरंत रुक सकें।

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
  static async Task<string> FetchAsync(CancellationToken ct)
  {
    await Task.Delay(80, ct); // pretend I/O
    ct.ThrowIfCancellationRequested();
    return "data";
  }

  static async Task<string> ProcessAsync(CancellationToken ct)
  {
    string raw = await FetchAsync(ct); // forward token
    await Task.Delay(80, ct);
    return raw.ToUpperInvariant();
  }

  public static void Main(string[] args)
  {
    var cts = new CancellationTokenSource();
    Task<string> job = ProcessAsync(cts.Token);
    cts.CancelAfter(100); // schedule a cancellation
    try
    {
      Console.WriteLine(job.GetAwaiter().GetResult());
    }
    catch (OperationCanceledException)
    {
      Console.WriteLine("Pipeline canceled");
    }
  }
}

token.Register से सफ़ाई

रद्दीकरण का अनुरोध किए जाने पर चलने वाली छोटी सफ़ाई क्रिया जोड़ने के लिए token.Register का उपयोग करें।

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
  static async Task UseRegistrationAsync(CancellationToken ct)
  {
    using (ct.Register(() => Console.WriteLine("Cleanup: releasing temp resources")))
    {
      for (int i = 0; i < 3; i++)
      {
        ct.ThrowIfCancellationRequested();
        await Task.Delay(120, ct);
        Console.WriteLine("Tick " + i);
      }
    }
  }

  public static void Main(string[] args)
  {
    var cts = new CancellationTokenSource();
    Task t = UseRegistrationAsync(cts.Token);
    Thread.Sleep(150);
    cts.Cancel();
    try { t.GetAwaiter().GetResult(); }
    catch (OperationCanceledException) { Console.WriteLine("Canceled with cleanup"); }
  }
}

लिंक किए गए स्रोत

CreateLinkedTokenSource कई संकेतों, जैसे उपयोगकर्ता द्वारा रद्दीकरण और समय-सीमा, को एक ही टोकन में मिला देता है।

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
  static async Task WorkAsync(CancellationToken ct)
  {
    await Task.Delay(500, ct);
    Console.WriteLine("Finished work");
  }

  public static void Main(string[] args)
  {
    var parent = new CancellationTokenSource();
    var timeout = new CancellationTokenSource();
    timeout.CancelAfter(200);

    // Link both sources: cancel if parent OR timeout requests
    var linked = CancellationTokenSource.CreateLinkedTokenSource(parent.Token, timeout.Token);

    Task t = WorkAsync(linked.Token);
    try { t.GetAwaiter().GetResult(); }
    catch (OperationCanceledException) { Console.WriteLine("Canceled by parent/timeout"); }
    finally { linked.Dispose(); parent.Dispose(); timeout.Dispose(); }
  }
}

सर्वोत्तम अभ्यास

सुझाव:

  • async एपीआई (Task.Delay, इनपुट/आउटपुट) में टोकन भेजें, ताकि वे तुरंत रुक सकें।
  • काम समाप्त करने के लिए OperationCanceledException फेंकें; इसे दबाएँ नहीं।
  • यदि CancellationTokenSource टाइमर या पंजीकरणों का स्वामी है, तो उसका Dispose करें।
  • हैंडलर तेज़ रखें; Register में न्यूनतम कार्य करें।

सहयोगात्मक रद्दीकरण का नियम

त्वरित जाँच: रद्दीकरण के अनुरोध पर किसी विधि को प्रतिक्रिया देने का सही तरीका क्या है?

पुनरावलोकन

पुनरावलोकन: रद्दीकरण को सहयोगात्मक बनाएँ—टोकन भेजें, जाँच करें या ThrowIfCancellationRequested कॉल करें, छोटी सफ़ाई क्रिया जोड़ें और संयुक्त संकेतों के लिए स्रोतों को लिंक करें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ C# सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
93
पाठ
346

अक्सर पूछे जाने वाले प्रश्न

क्या “CancellationToken patterns; cooperative cancel” पाठ निःशुल्क है?

हाँ—“CancellationToken patterns; cooperative cancel” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 3 पाठ शामिल हैं।

“CancellationToken patterns; cooperative cancel” में मैं क्या सीखूँगा?

CancellationToken पास करें और उसका सम्मान करें: CTS बनाएँ, cancellation के लिए poll/throw करें, async APIs को पास करें और registrations के साथ cleanup करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 3 में से 1वाँ पाठ है।

“CancellationToken patterns; cooperative cancel” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. CancellationToken patterns; cooperative cancel
  2. Timeouts, IProgress , async disposables (अनुकरण)
  3. Resilience की बुनियाद: retry और backoff
← C# अकादमी पर वापस जाएँ