Мне нужно отменить все задачи, выполненные Parallel.For при использовании функции.Например:
class Example
{
private CancellationTokenSource cts;
public Example()
{
cts = new CancellationTokenSource();
}
public void plsCompute()
{
ParallelOptions po = new ParallelOptions{ CancellationToken = cts.Token };
Parallel.For(0, 10, po, (i) => compute());
}
public void plsStopComputing()
{
cts.Cancel();
}
public void compute()
{
for(int i=0;i<100000;i++){
if(//token was cancelled){
Console.WriteLine("Cancelled");
return;
}
//do something
}
}
Мне нужно остановить все задачи, которые выполняются в данный момент, а не создавать новые.
Есть ли способ добиться этого?
Все примерыЯ видел, был с функцией, сделанной в лямбда, так что там я мог получить доступ к CTS.Мне нужно, чтобы это было в другой функции.Также, если я передал токен в качестве параметра, он не работал.токен cts был изменен, но в других потоках он не изменился.
Любая помощь appriciated:)
EDIT
Как я уже упоминал в комментарии, я получил более глубокий, этот пример недействительно то, что я хочу.Эти методы вызываются сообщениями, отправленными через msmq из приложения wpf.Я думаю, что каждый раз, когда я звоню из wpf, сервис создает новый экземпляр этого класса, поэтому он отменяет новый экземпляр вместо того, который уже вычисляется.Есть ли способ вызвать тот же экземпляр?