Допустим, у меня есть что-то вроде этого:
private CancellationTokenSource myToken;
public void MyMyMethod()
{
myToken = new CancellationTokenSource();
var task = Task.Factory.StartNew(() => DoIt(myToken.Token), myToken.Token);
Thread.Sleep(100);
myToken.Cancel();
}
public void MyOtherMethod()
{
myToken.Cancel();
}
private void DoIt(CancellationToken token)
{
token.ThrowIfCancellationRequested();
try
{
for (int i = 0; i < 1000000; i++)
{
Console.WriteLine(i);
}
}
catch (Exception ex)
{
string s = "";
}
}
Если я вызову myToken.Cancel, он внезапно остановит задачу в методе DoIt или мне придется передать токен DoIt и вызвать myToken.ThrowIfCancellationRequested()
, чтобы при вызове Cancel он вызывал исключение и внезапно останавливался ?
Могу ли я не сделать это, не передав токен методу задачи?
Или я должен отслеживать токен. Запрос об отмене запроса в методе DoIt?