예제 #1
0
        /// <summary>
        /// 出稿処理
        /// </summary>
        /// <param name="cm"></param>
        private bool PublishAsync(ContentModel cm)//, CancellationToken cancelToken)
        {
            bool ret = false;

            // ステータスクリア
            cm.ClearPubStatus();

            // json作成
            // ..............

            // exe呼び出し
            Process CmdExec = new Process();

            // Timeout Timer
            Stopwatch sw = Stopwatch.StartNew();

            // Sample Wait (実際はこの時間がexe待ち時間)
            long sampleWait = _rdm.Next(3000, 8200);

            Console.WriteLine($"■ {cm.ContentlId} の出稿開始(処理時間:{sampleWait / 1000}秒)");

            while (sw.ElapsedMilliseconds < _maxWaitTime)
            {
                //ダミー負荷用ウエイト ms スレッドを止める
                Thread.Sleep(30);

                //進捗報告
                cm.StatusValue = (double)(sw.ElapsedMilliseconds * 100.0 / _maxWaitTime);

                // Sample Wait到達でbreak
                if (sampleWait < sw.ElapsedMilliseconds)
                {
                    // 処理結果OK
                    if (sw.ElapsedMilliseconds < 8000)
                    {
                        ret = true;
                        Console.WriteLine($"■ {cm.ContentlId} の出稿成功(処理時間:{sw.ElapsedMilliseconds / 1000}秒)");
                        break;
                    }
                    // 処理結果NG
                    ret = false;
                    Console.WriteLine($"■ {cm.ContentlId} の出稿エラー(処理時間:{sw.ElapsedMilliseconds / 1000}秒)");
                    break;
                }

                //キャンセルリクエストの確認
                //if (cancelToken.IsCancellationRequested)
                //{
                //    ret = false;
                //    break;
                //}
            }
            cm.SetPubStatus(ret);
            Console.WriteLine($"■ {cm.ContentlId} の出稿終了(処理時間:{sw.ElapsedMilliseconds / 1000}秒)");
            //}
            return(ret);
        }