619 messaggi dal 13 novembre 2008
Contributi
ciao,
interessante articolo, utilizzo dei token memorizzati in una table dello storage di Azure che una volta scaduti occupano inutilmente spazio, penso possa essere interessante implementare questa soluzione; sarebbe bello avere un esempio per una soluzione che utilizza un timer di avvio ricorrente...
Grazie!
10.746 messaggi dal 09 febbraio 2002
Contributi
Ciao, grazie! Credo che si potrebbe risolvere anche senza timer. Dallo StartAsync avvii un task in questo modo:
private Task backgroundTask;
private CancellationTokenSource cancellationTokenSource;
public Task StartAsync(CancellationToken cancellationToken)
{
  //Questo ci serve per interrompere il lavoro quando l'applicazione viene arrestata
  cancellationTokenSource = new CancellationTokenSource();
  backgroundTask = DoWork(cancellationTokenSource.Token);
  return Task.CompletedTask;
}

Il metodo DoWork è quello che si occuperà di fare il lavoro in background. Puoi realizzarlo così, con dei Task.Delay per farlo attendere il tempo necessario prima di compiere la sua elaborazione.
public async Task DoWork(CancellationToken token)
{
  //Finché non viene richiesta la cancellazione...
  while (!token.IsCancellationRequested)
  {
    try {
      //Aspettiamo un po' prima di compiere l'operazione.
      //Ovviamente il valore 5000 può essere calcolato in base alle tue esigenze
      //es. numero di millsecondi restanti ad una specifica data/ora
      //Ad ogni iterazione del ciclo while lo puoi ricalcolare (se è differente di volta in volta)
      await Task.Delay(5000, token);

      //TODO: Qui fai il lavoro

    } catch (OperationCanceledException) {
      //Se è stata richiesta la cancellazione, usciamo dal ciclo
      break;
    }
  }
}


E poi nello StopAsync non resta che cancellare il token per segnalare al metodo DoWork che deve arrestarsi.
public async Task StopAsync(CancellationToken cancellationToken)
{
  cancellationTokenSource.Cancel();
}


ciao,
Moreno
Modificato da BrightSoul il 11 gennaio 2018 19.24 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.