Esempio n. 1
0
        /// <summary>
        /// n フレーム後に F1(x)を返すコルーチン。
        /// キャンセル機能付き。
        /// </summary>
        /// <param name="x">入力値。</param>
        /// <param name="n">コルーチン稼働のフレーム数。</param>
        /// <param name="completed">完了時に呼ばれるデリゲート。</param>
        /// <param name="ct">キャンセル用トークン。</param>
        /// <returns></returns>
        public static System.Collections.IEnumerator F1Cancelable(double x, int n, Action<double> completed, CancellationToken ct)
        {
            for (int i = 0; i < n; i++)
            {
                // キャンセルへの対処はあくまでコルーチン側の債務
                // 例外を出して止める。
                ct.ThrowIfCancellationRequested();

                yield return null;
            }

            completed(F1(x));
        }
        static System.Collections.IEnumerator Cancelで戻り値が切り替わるコルーチン(int n, Action<string> completed, CancellationToken ct)
        {
            var message = CompletedMessage;

            ct.Register(() =>
            {
                message = CanceledMessage;
            });

            for (int i = 0; i < n; i++)
            {
                if (ct.IsCancellationRequested)
                    break;

                yield return null;
            }

            completed(message);
        }