2013-08-21 14 views
6

Await/Async ve CancellationTokens ile oynuyordum. Kodum çalışır, ancak İptal edildiğinde Görev ne olur? Hala kaynakları mı alıyor yoksa çöp toplanıyor mu? İşte İptal edildiğinde Ne Yapılır?

benim kodudur:

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

cevap

0

bir görev sadece (o sormalıyız yani "Ben iptal ben?") Eşzamanlı iptal yüzden görev örneğin temizlik (yapmak için çok kolay olabilir using deyimini kullanarak). Tahsis ettiği tüm kaynaklar daha sonra GC tarafından ya da daha sonra serbest bırakılır (her zaman olduğu gibi, GC'nin ne zaman başlayacağını bilmeyiz, bir GC.Collect(); GC.WaitForFinalizers(); yapmazsak) ...

İlgili konular