2015-08-25 83 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);