Я создал небольшой демонстрационный проект, чтобы помочь мне понять, как я могу использовать токены отмены. Я понимаю, что вы отменяете токен и проверяете, была ли запрошена отмена, но есть ли способ проверить, была ли отмена реализована? В моем примере ниже я не хочу запускать Work() снова, пока DoWork() не завершит работу.
public class Program
{
public static CancellationTokenSource tokenSource;
private static void Main(string[] args)
{
while (true)
{
Work();
}
}
public static async void Work()
{
tokenSource = new CancellationTokenSource();
Console.WriteLine("Press any key to START doing work");
Console.ReadLine();
Console.WriteLine("Press any key to STOP doing work");
DoWork(tokenSource.Token);
Console.ReadLine();
Console.WriteLine("Stopping...");
tokenSource.Cancel();
}
public static async void DoWork(CancellationToken cancelToken)
{
while (true)
{
Console.WriteLine("Working...");
await Task.Run(() =>
{
Thread.Sleep(1500);
});
if (cancelToken.IsCancellationRequested)
{
Console.WriteLine("Work Cancelled!");
return;
}
}
}
}
async void
. Используйтеasync Task
. РезультирующееTask
можно ожидать (выбрасывая исключение, если оно было отменено) или явно проверять на завершение, как вам угодно. - person Jeroen Mostert   schedule 08.10.2019