У меня есть следующая программа:
class myClass
{
CancellationTokenSource cts;
public string someMethod(){
someMethodWhichIsAsync("10")
}
private async Task<string> someMethodWhichIsAsync(string data)
{
if(cts != null)
{
cts.Cancel();
}
cts = new CancellationTokenSource();
string myString = await Task.Run(() => someLoop(data,cts.Token) );
return "success";
}
private string someLoop(string data, CancellationToken token)
{
while (True)
{
if (token.IsCancellationRequested == true)
{
return "Canceled";
}
//Do some work in a continuous loop
}
return "successful end";
}
}
Я разместил CancellationTokenSource cts;в глобальной области видимости класса, чтобы она была доступна при каждом запуске любой функции.
Однако cts.Cancel ();работает, только если я включаю его в функцию, которая выполняется.
if (token.IsCancellationRequested == true)
{
return "Canceled";
}
Почему это так? Ни один из примеров кода, который я нашел, не требует этого.