2012-02-22 14 views
1

通常のメソッド呼び出しに加えて、呼び出すスケジュールされたメソッド呼び出しが必要なサービスクラス(ASP.NETアプリケーション内)たとえば、毎日午前1時に。.NETアセンブリ内のC#スケジュールされたタスクに帰属するメソッド

私の考えは、任意のスケジュールされたタスクの方法に対して使用されるカスタム属性を作成することです:

[ScheduledTask(Every=TimeSpans.Day, At=6)] 
public static void Cleanup() 
{ 
    // some clean up code here 
} 

、私は、WebアプリケーションのでのAppDomainにロードされたアセンブリをスキャンしなければならない、これを実現するためにApplication_Startメソッド。 ScheduledTask属性で静的メソッドを探し、スケジューラーを呼び出して、属性に従ってこれらのメソッドを実行します。

私はネットを見渡して、他に誰もこれをしていないように見え、これが何らかの理由で一般的に悪い考えかと疑問に思っていました。それは可能でしょうか?

ありがとうございました!

答えて

3

いくつかの問題が、私は以下を参照してください懸念の

  • 分離を。あなたのクラスはCleanupの実装とそれを実行するスケジュールを提供します。管理者はスケジュールを管理したいと思う可能性があります(たとえば、アクティビティが少ないときにクリーンアップを実行するなど)。スケジュールを提供するために設定を使用する方が一般的です。

  • スケジュールされているタスクの概要を管理者が把握することが難しい。

  • スケジュールの解釈。あなたの例はUTCか現地時間か?

  • スケジュールの変更が容易 - 再コンパイルする必要があります。

  • ASP.NETアプリケーションをシャットダウンすることができます。または所定のスケジュールで実行され、別の要求が到着するまでは再起動しません。これにより、IISはスケジュールされたタスクを実行するための貧弱なホストになります。

+0

フィードバックいただきありがとうございます。 SOCポイントでは、SOCを維持するために、実際のスケジュールを設定に分ける必要があります(属性自体がSOCに違反しているとは思わないでください)。第二:うん、あなたを持っています。 3日目と4日目:実際にスケジュールをconfigに移動してください。第5回:実際はAzureなので、Web Roleは独自のスレッドで動作し続けます。どうも! – krisdyson

関連する問題