Pergunta

Escrevi um aplicativo do SharePoint 2010 que usa um TimerJob para acionar o processamento de alguns documentos em uma lista. O temporizador está definido para acionar a cada minuto, mas o processamento pode levar mais de um minuto. Só estou me perguntando se o próximo gatilho do trabalho do timer será iniciado usando um novo thread, ou o serviço de timer aguardará até que o primeiro thread tenha concluído. Não tenho idéia de como o SharePoint gerencia os threads para o TimerJobs e não consigo encontrar nenhuma informação relevante.

Isso é possivelmente um problema, dado que meu TimerJob Definição tem o seguinte:

 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)
        { 
        }
    }
}

o PRManager.TriggerProcessing() é um método estático, obviamente, e embora contenha mecanismos para limitar apenas um fio de cada vez entrando no corpo do método, estou me perguntando se o SharePoint cria vários threads no caso de aquelas chamadas de intervalo em minuto para executar sobreposição.

Foi útil?

Solução

Bem, não é tanto uma coisa de "tópico", tanto quanto uma coisa de "trabalho".

O SharePoint armazena todos os trabalhos em uma tabela de banco de dados e usa esta tabela para rastrear o que está em execução e onde está em execução. Ele possui um mecanismo de sincronização incorporado responsável por garantir que os trabalhos sejam executados, como dizem as instruções do trabalho.

Por exemplo, pegue a implantação pergunte o que nada mais é do que um trabalho. A tarefa de implantação apenas permite que um trabalho seja executado para uma determinada solução por vez. Ele garante que todas as tarefas terminem em cada servidor da fazenda antes que o trabalho geral seja relatado como feito.

Portanto, a resposta dependerá de como suas propriedades de configuração de trabalho estão definidas. Há uma propriedade nesse trabalho que diz ao SharePoint para permitir apenas uma instância desse trabalho a ser executado por vez. Portanto, se o trabalho estiver atualmente executando outra instância dele não será iniciada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top