2013-08-21 139 views
6

我正在等待/ Async和CancellationTokens。我的代碼有效,但是當它被取消時,Task發生了什麼?它仍然佔用資源,或者是垃圾收集還是什麼?取消任務時會發生什麼?

這裏是我的代碼:

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(); 
    } 

回答

0

任務只能被同步取消(即它必須問「我該取消了?」),所以很容易的任務,通過做清理(例如使用using聲明)。所有分配的資源在之前或之後被GC釋放(一如既往,我們不知道GC何時會採取行動,除非我們做了GC.Collect(); GC.WaitForFinalizers();)...

相關問題