2013-08-21 18 views
6

Stavo giocando con Await/Async e CancellationTokens. Il mio codice funziona, ma cosa succede all'attività quando è annullata? Sta ancora recuperando risorse o è raccolta di rifiuti o cosa?Cosa succede a un'attività quando è annullata?

Ecco il mio codice:

private CancellationTokenSource _token = new CancellationTokenSource(); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    async Task<String> methodOne() 
    { 
     txtLog.AppendText("Pausing for 10 Seconds \n"); 
     var task = Task.Delay(10000, _token.Token); 
     await task; 
     return "HTML Returned. \n"; 

    } 

    private async void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      var task1 = methodOne(); 
      await task1; 
      txtLog.AppendText(task1.Result + "\n"); 
      txtLog.AppendText("All Done \n"); 
     } 
     catch (OperationCanceledException oce) 
     { 
      txtLog.AppendText("Operation was cancelled"); 
     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     _token.Cancel(); 
    } 

risposta

0

Un compito può essere annullata solo in modo sincrono (il che significa che si deve chiedere "sto cancellato?"), Quindi è facile per il compito di fare pulizia (ad esempio usando la dichiarazione using). Tutte le risorse assegnate vengono poi liberate dal GC prima o dopo (come sempre, non sappiamo quando il GC agirà, a meno che non facciamo un GC.Collect(); GC.WaitForFinalizers();) ...

Problemi correlati