This is basically an extension of @FrankFajardo's answer to provide a concrete example. When you go through CancellationToken, you also need to track it for any cancellation request outside. It will look like this:
class Class1
{
public async Task SomeTaskAsync(CancellationToken cancellationToken)
{
for (int i = 0; i < 5; i++)
{
if (cancellationToken.IsCancellationRequested)
break;
await Task.Delay(2000);
}
}
}
class Class2
{
public async Task ContinuouslyTaskAsync(CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested)
{
await Task.Delay(1000);
}
}
}
, , CancellationTokenSource.Cancel() :
static void Main(string[] args)
{
var p = new Program();
var c1 = new Class1();
var c2 = new Class2();
var cancellationTokenSource = new CancellationTokenSource();
var someTask = c1.SomeTask(cancellationTokenSource.Token);
var continuousTask = c2.ContinuouslyTask(cancellationTokenSource.Token);
while (Console.ReadKey().Key != ConsoleKey.Enter) { }
cancellationTokenSource.Cancel();
Task.WaitAll(someTask, continuousTask);
p.Logout();
}
. Task.WaitAll , , Main . Task.WhenAll, Task.