Come viene aggiornato CancellationToken.IsCancellationRequested?

0

Oggi ho eseguito alcuni refactoring e ho riscontrato una cosa interessante. Ho estratto un metodo da un codice che utilizza un token di cancellazione passato per controllare se l'utente non ha annullato l'attività padre.

Quando l'ho implementato, ho passato il token di cancellazione in questo modo:

Object result = myClass.ExecuteSomething(token);

Ora, quando ho refactored il metodo ExecuteSomething, estraendo metodi per rendere il metodo più pulito, il designer VS2012 ha creato qualcosa del genere:

public Object ExecuteSomething(CancellationToken token)
{
    // Some code here
    NewMethod(ref token);
}

private void NewMethod(CancellationToken token)
{
    // Some code here
}

Ora, per me questo sembrava strano, e ho scoperto che CancellationToken è una struct e non una classe (e come so passare una struct a un metodo è fatta per valore e non per ref). Ho testato il codice senza ref e la proprietà del token è stata aggiornata correttamente. Questo significa che questa proprietà non memorizza il valore ma lo sta richiedendo da qualche parte usando qualche riferimento. Non è disponibile alcun codice sorgente per CancellationToken, quindi non sono stato in grado di scoprire come questo è stato fatto veramente, e qual è la differenza tra ref e value pass del token.

P.S. Ho pensato che fosse più una questione concettuale che un problema, quindi l'ho postato qui invece di StackOverflow.

    
posta XMight 04.03.2015 - 15:07
fonte

0 risposte

Leggi altre domande sui tag