Я довольно новичок в программировании на основе задач и пытаюсь определить, как вернуть задачу и убедиться, что она была запущена. Код, который я получил, не был тем, чего я ожидал. Консольное приложение выглядит следующим образом:Какая задача возвращается и почему это состояние задачи RanToCompletion
public static void Main(string[] args)
{
var mySimple = new Simple();
var cts = new CancellationTokenSource();
var task = mySimple.RunSomethingAsync(cts.Token);
while (task.Status != TaskStatus.RanToCompletion)
{
Console.WriteLine("Starting...");
Thread.Sleep(100);
}
Console.WriteLine("It is started");
Console.ReadKey();
cts.Cancel();
}
public class Simple
{
public async void RunSomething(CancellationToken token)
{
var count = 0;
while (true)
{
if (token.IsCancellationRequested)
{
break;
}
Console.WriteLine(count++);
await Task.Delay(TimeSpan.FromMilliseconds(1000), token).ContinueWith(task => { });
}
}
public Task RunSomethingAsync(CancellationToken token)
{
return Task.Run(() => this.RunSomething(token));
}
}
Выход:
Starting...
0
It is started
1
2
3
4
Почему задача, которая возвращается имеют статус TaskStatus.RanToCompletion по сравнению с TaskStatus.Running, как мы видим, что while цикл все еще выполняется? Я проверяю статус задачи по включению задачи RunSomething в threadpool, а не в задачу RunSomething?