SharePoint TimerJobs e Threading
-
22-09-2019 - |
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.
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.