Ho un servizio Windows che genera un insieme di attività figlio su thread separati e che dovrebbe terminare solo quando tutte queste attività sono state completate correttamente. Non so in anticipo quanto tempo ci vorrà per terminare un'attività dopo che è stato ricevuto un segnale di arresto. Durante OnStop(), attendo intervalli per quel segnale di stop e continuo a richiedere un tempo aggiuntivo per tutto il tempo che il sistema è disposto a concedergli.Che cos'è un sovraccarico sicuro per RequestAdditionalTime()?
Ecco la struttura di base:
class MyService : ServiceBase
{
private CancellationTokenSource stopAllActivities;
private CountdownEvent runningActivities;
protected override void OnStart(string[] args)
{
// ... start a set of activities that signal runningActivities
// when they stop
// ... initialize runningActivities to the number of activities
}
protected override void OnStop()
{
stopAllActivities.Cancel();
while (!runningActivities.Wait(10000))
{
RequestAdditionalTime(15000); // NOTE: 5000 added for overhead
}
}
}
Solo quanto "spese generali" dovrei essere aggiunta nella chiamata RequestAdditionalTime
? Sono preoccupato che le richieste siano cumulative, anziché basate sul momento in cui viene effettuata ogni chiamata RequestAdditionalTime
. In questo caso, l'aggiunta di un sovraccarico potrebbe comportare la negazione della richiesta da parte del sistema perché è troppo lontano in futuro. Ma se non aggiungo alcun overhead, il mio servizio potrebbe essere interrotto prima che abbia la possibilità di richiedere il prossimo blocco di tempo aggiuntivo.