Reactive Extensions (Rx)を利用して、ASP.NETで定時タスクを実行するサンプル


ASP.NET上で、DBのお掃除など定期的に処理を行いたい場面があるかと思います。

通常ですと、タスクタスクスケジューラを利用して処理を実行させたり、WindowsServiceアプリを常駐させ所定の処理を行わせるなど、色々と面倒な作業を行う必要があると思います。

今回は、Reactive Extensions (Rx)を、ASP.NETのGlobal.asax.csに組込み簡易的な定時タスク実行処理のサンプルを作成してみました。このコードは3秒毎にメッセージを表示するだけの簡単な物ですが、わずかなコードで実装出来る事がおわかり頂けると思います。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using System.Web.Routing;

 

using System.Reactive.Concurrency;

using System.Diagnostics;

 

namespace MvcWebRole1

{

    // メモ: IIS6 または IIS7 のクラシック モードの詳細については、

    // http://go.microsoft.com/?LinkId=9394801 を参照してください

 

    public class MvcApplication : System.Web.HttpApplication

    {

        public static void RegisterRoutes(RouteCollection routes)

        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

 

            routes.MapRoute(

                "Default", // ルート名

                "{controller}/{action}/{id}", // パラメーター付きの URL

                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // パラメーターの既定値

            );

        }

 

        protected void Application_Start()

        {

            AreaRegistration.RegisterAllAreas();

 

            RegisterRoutes(RouteTable.Routes);

 

            //スケジュールを登録します

            RegistSchedule();

        }

 

        private TimeSpan ScheduleTimeSpan = TimeSpan.FromSeconds(3);

        /// <summary>

        /// スケジュールを登録します

        /// </summary>

        public void RegistSchedule()

        {

            Scheduler.TaskPool.Schedule(ScheduleTimeSpan, () =>

            {

                anyTask();

            });

 

            //Debug.WriteLine("Task Scheduled!!");

        }

 

        /// <summary>

        /// 任意のタスクを実行します

        /// </summary>

        private void anyTask()

        {

            //任意のタスクを実装します

            Debug.WriteLine("Task run!! at: " + DateTime.Now.ToString());

 

            //スケジュールを再登録します

            RegistSchedule();

        }

    }

}

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中