Costruttori di attività asincrone

Costruttore PeriodicTask(action, periodMilliseconds, excutingNode)

Crea un’attività di tipo PeriodicTask, che esegue codice a intervalli di tempo regolari.

PeriodicTask(Action action, int periodMilliseconds, IUANode executingNode);

Argomenti

action Action

Metodo o espressione lambda da eseguire.

periodMilliseconds int

Intervallo di tempo tra un’esecuzione e la successiva.

executingNode IUANode

Nodo in cui eseguire il codice.

Esempio

Di seguito un esempio in cui si crea un’attività myPeriodicTask che esegue il metodo IncremetVariable() ogni secondo (1000 millisecondi). Il metodo incrementa il valore della variabile variable1 di un’unità ogni volta che viene eseguito.

public override void Start()
{
    myPeriodicTask = new PeriodicTask(IncrementVariable, 1000, LogicObject);
    myPeriodicTask.Start();
}

public override void Stop()
{
    myPeriodicTask.Dispose();
}

private void IncrementVariable()
{
    variable1.Value = variable1.Value + 1;
}

private PeriodicTask myPeriodicTask;

Nota

in questo esempio il metodo IncrementVariable() non ha un argomento di tipo PeriodicTask poiché la semplicità del suo codice non rende necessario annullare l’attività.

Costruttore DelayedTask(action, delayMilliseconds, executingNode)

Crea un’attività di tipo DelayedTask, che esegue codice dopo un intervallo di tempo desiderato.

DelayedTask(Action action, int delayMilliseconds, IUANode executingNode);

Argomenti

action Action

Metodo o espressione lambda da eseguire.

delayMilliseconds int

Tempo dopo il quale eseguire il metodo o l’espressione lambda.

executingNode IUANode

Nodo in cui eseguire il codice.

Esempio

Di seguito un esempio in cui si crea un’attività myDelayedTask per eseguire il metodo ResetLabelText() dopo 10 secondi (10000 millisecondi). Il metodo cancella il testo di un’etichetta label1.

public override void Start()
{
    myDelayedTask = new DelayedTask(ResetLabelText, 10000, LogicObject);
    myDelayedTask.Start();
}

public override void Stop()
{
    myDelayedTask.Dispose();
}

private void ResetLabelText()
{
    label1.Text = string.Empty;
}

private DelayedTask myDelayedTask;

Nota

in questo esempio il metodo ResetLabelText() non ha un argomento di tipo DelayedTask poiché la semplicità del suo codice non rende necessario annullare l’attività.

Costruttore LongRunningTask(action, executingNode)

Crea un’attività di tipo LongRunningTask, per eseguire codice impegnativo a livello di tempo di esecuzione e di risorse computazionali.

LongRunningTask(Action action, IUANode executingNode);

Argomenti

action Action

Metodo o espressione lambda da eseguire.

executingNode IUANode

Nodo in cui eseguire il codice.

Esempio

Di seguito un esempio in cui si crea un’attività myLongRunningTask per processare un file CSV tramite il metodo ProcessCsvFile(). Il metodo ha come argomento l’attività stessa, il cui stato viene verificato tramite proprietà IsCancellationRequested dopo la lettura di ogni riga del file CSV. In questo modo, l’attività è annullabile.

using namespace System.IO; // For using the StreamReader
class public override void Start()
{
    myLongRunningTask = new LongRunningTask(ProcessCSVFile, LogicObject);
    myLongRunningTask.Start();
}

public override void Stop()
{
    myLongRunningTask.Dispose();
}

private void ProcessCsvFile(LongRunningTask task)
{
    using (var reader = new StreamReader(pathToCsvFile))
    {
        while (!reader.EndOfStream)
        {
            // Check whether task cancellation has been requested
            if (task.IsCancellationRequested)
            {
                // Properly handle task cancellation here
                return;
            }

            string line = reader.ReadLine();
            // Process line
        }
    }
}

private LongRunningTask myLongRunningTask;

Vedi anche

Concetti correlati

Eseguire codice in modo asincrono