Не могу найти подходящих примеров.
Есть код, который выполняет долгие вычисления, решил отправить в отдельный поток, потом захотелось сделать так что бы по действию пользователя, он прерывался. Раньше и всегда я делал, кучу говнокода, вставлял проверки на статус токена или булевой переменной.
for(int a=0;a<n;a++){
if(cancellationToken.IsCancellationRequested) {
Dispose();
return;
}
for(int b=0;b<m;b++){
for(int c=0;c<k;c++){
for(int d=0;d<l;d++){
int[a][b][c][d]=Math.Pow(a*b*c*d,Math.Sqrt(Math.Sin(Math.Cos(Math.Sqrt(a-b/a)))))))*a+b;
}
} }
}
Допустим какой-то такой пример. Но тут еще пример удачный. А что если код размазан, на кучу функций, с кучей размотанных линейных циклов последовательно, в общем 200 строчек кода, то таких проверок штук 10 ставить придется, не красиво. Это вообще правильно? Может есть другие подходы.
Или допустим. Поток вызывает 1 функцию библиотечную неуправляемого кода, как ее прервать?
Какие есть способы.
Например с ходу придумал, можно кодогенераций размазать проверки. По идеи такое должно быть, может библиотека или объект какой-то, типа на вход поступает функция метода, и функция проверки, которую кодогенератор там всунет куда надо.