3

TimerJob を使用してリスト内のいくつかのドキュメントの処理をトリガーする SharePoint 2010 アプリを作成しました。タイマーは 1 分ごとにトリガーするように設定されていますが、処理には 1 分以上かかる場合があります。タイマー ジョブの次のトリガーが新しいスレッドを使用して開始されるのか、それとも最初のスレッドが完了するまでタイマー サービスが待機するのか、疑問に思っています。Sharepoint が TimerJobs のスレッドを管理する方法がわかりません。また、関連する情報を実際に見つけることもできません。

TimerJob私の定義には次のようなものがあるため、これはおそらく問題です。

 public override void Execute(Guid contentDbId)
    {
        try
        {
            SPWebApplication webApplication = this.Parent as SPWebApplication;
            SPContentDatabase contentDb = webApplication.ContentDatabases[contentDbId];
            using (SPSite site = contentDb.Sites[0])
            {
                using (SPWeb web = site.RootWeb)
                {                       
                    PRManager.TriggerProcessing(web);    // ?                   
                }
            }
        }                      
        catch (Exception)
        { 
        }
    }
}

これPRManager.TriggerProcessing()は明らかに静的メソッドであり、メソッド本体に入るスレッドを一度に 1 つだけに制限するメカニズムが含まれていますが、これらの at-minute-interval 呼び出しが発生した場合に SharePoint が複数のスレッドを作成するかどうか疑問に思っています。オーバーラップを実行します。

4

1 に答える 1

3

まあ、それは「仕事」というよりも「スレッド」というよりも。

SharePoint はすべてのジョブをデータベース テーブルに格納し、このテーブルを使用して実行中のジョブと実行中の場所を追跡します。ジョブの指示どおりにジョブが確実に実行されるようにする同期エンジンが組み込まれています。

たとえば、単なる仕事にすぎないデプロイメントの依頼を考えてみましょう。展開タスクでは、特定のソリューションに対して一度に 1 つのジョブしか実行できません。ジョブ全体が完了したと報告される前に、ファーム内の各サーバーですべてのタスクが確実に終了するようにします。

したがって、答えは、ジョブ構成プロパティの設定方法によって異なります。そのジョブには、そのジョブの 1 つのインスタンスのみを一度に実行できるように SharePoint に指示するプロパティがあります。そのため、ジョブが現在実行中の場合、その別のインスタンスは開始されません。

于 2010-02-24T01:05:25.530 に答える