2015-08-25 126 views
2

我需要取消使用從dll(本示例中爲MethodFromDll())的長時間運行方法的任務 在哪裏可以調用cancellationToken.ThrowIfCancellationRequested()方法來取消此任務?取消任務

tokenSource = new CancellationTokenSource(); 
CancellationToken cancellationToken = tokenSource.Token;   

t = Task.Factory.StartNew(() => { 
try { 
    ...some code 
    // I need to cancel this task manually if method not answer 
    // or there is no wish to wait 
    MethodFromDll(); 
    ...some code 
    } catch { 
     ...some code 
    } 
}, cancellationToken); 
+0

可以在例如http://stackoverflow.com/a/11191070/43846 – stuartd

+0

該添加哪些使用該令牌超時任務,如是TWAIN庫的Scan()方法,我不知道5seс或5分鐘它運行..( – SetSun

+0

因此,將它設置爲足夠長的值以進行任何合理的掃描,並且如果用戶在此之前表明他們希望取消,這就是你調用'tokenSource.Cancel'方法的地方。超時任務將會看到取消被請求,並且'IsCancelled'被設置爲true 。 – stuartd

回答

0

呼叫取消您CancelationTokenSource和註冊回調

tokenSource = new CancellationTokenSource(); 
CancellationToken cancellationToken = tokenSource.Token; 

return Task.Factory.StartNew(() => 
{ 
    try 
    { 
     cancellationToken.Register(() => 
     { 
      //call api method to stop long running method 
     }); 
     //...some code 
    } 
    catch 
    { 

    } 
}, cancellationToken);