C#のCalcellation Token

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

こんにちは、サイオステクノロジー技術部 武井です。非同期の処理でよく出てくるC#のCalcellation Tokenですが、よくわからず使っていたので、まとめてみました。

CalcellationTokenとは、非同期で実施している処理を途中でキャンセルできるものです。と言っても仕組みは非常に簡単で、非同期処理を実施するメソッドにCalcellationTokenを生成して、そのトークンに対して、cancelメソッドを実行すると、例外が発生するので、それをキャッチすればOKです。

以下がCalcellationTokenを使ったキャンセル処理を実現したコードになります。Windowsフォームアプリケーションで、Formがロードされると同時に5秒毎にコンソールに文字を表示する非同期処理を延々と繰り返しています。ボタンをクリックすると、その処理が中止されます。

public partial class Form1 : Form
{
    // CancellationTokenを元となるCancellationTokenSourceを生成します。
    private CancellationTokenSource cts = new CancellationTokenSource();

    // 5秒毎にコンソールに文字を表示する非同期処理を延々と繰り返す処理です。
    // 引数にはCalcellationTokenを渡します。
    private async Task InfiniteLoopAsync(CancellationToken ct) {
        while (true) {
            // CancellationTokenのCancelメソッドが実行されたら、
            // OperationCanceledExceptionを発生させるコードです。
            ct.ThrowIfCancellationRequested();
            await Task.Delay(5000);
            Console.WriteLine("無限ループ実行中"); 
        }   
    }

    public Form1()
    {   
        InitializeComponent();
    }   

    private async void Form1_Load(object sender, EventArgs e)
    {   
        // Formがロードされたら、5秒毎にコンソールに文字を表示する非同期処理を
        // 延々と繰り返す処理を開始します。
        try 
        {   
            // 引数にCancellationTokenを渡します。
            await InfiniteLoopAsync(cts.Token);
        }   
        catch (OperationCanceledException ce) 
        { 
            // キャンセルされたら、つまりCancellationTokenのCancelメソッドが実行されたら、
            // 発生するOperationCanceledExceptionをキャッチしてキャンセル処理を行うコードです。
            Console.WriteLine("キャンセルされたよ"); 
        }   
    }   

    private void Button1_Click(object sender, EventArgs e)
    {   
        // 非同期処理をキャンセルします。
        cts.Cancel();
    }   
}

実行結果です。

無限ループ実行中
無限ループ実行中
無限ループ実行中
例外がスローされました: 'System.OperationCanceledException' (mscorlib.dll の中)
例外がスローされました: 'System.OperationCanceledException' (mscorlib.dll の中)
キャンセルされたよ

超簡単ですね。

アバター画像
About 武井 宜行 269 Articles
Microsoft MVP for Azure🌟「最新の技術を楽しくわかりやすく」をモットーにブログtech-lab.sios.jp)で情報を発信🎤得意分野はAzureによるクラウドネイティブな開発(Javaなど)💻「世界一わかりみの深いクラウドネイティブ on Azure」の動画を配信中📹 https://t.co/OMaJYb3pRN
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる