1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

アプリケーション終了時にキャンセルされるCancellationTokenを提供するstaticクラス

Posted at

以下のコードをどこかに貼り付ければすぐ使えます。

using System.Threading;
using UnityEngine;

namespace Module._Engine
{
    /// <summary>
    /// アプリケーション終了時にキャンセルされるCancellationTokenを提供
    /// グローバルにどこからでもアクセス可能
    /// </summary>
    public static class ApplicationCancellationToken
    {
        private static CancellationTokenSource _source;
        private static bool _isInitialized;
        
        [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
        private static void OnSubsystemRegistration()
        {
            _isInitialized = false;
            _source?.Dispose();
            _source = null;
        }
        
        /// <summary>
        /// アプリケーション終了時にキャンセルされるCancellationToken
        /// </summary>
        public static CancellationToken Token
        {
            get
            {
                EnsureInitialized();
                return _source.Token;
            }
        }
        
        /// <summary>
        /// 初期化
        /// </summary>
        private static void EnsureInitialized()
        {
            if (_isInitialized) return;
            
            _source = new CancellationTokenSource();
            Application.quitting += OnApplicationQuitting;
            _isInitialized = true;
        }
        
        /// <summary>
        /// アプリケーション終了時
        /// </summary>
        private static void OnApplicationQuitting()
        {
            _source?.Cancel();
            _source?.Dispose();
            Application.quitting -= OnApplicationQuitting;
        }
    }
}

使用時は単に

await UniTask.Delay(100, cancellationToken: ApplicationCancellationToken.Token);

みたいな感じでcancellation tokenとしてぶっこめばOKです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?