저는 작업 기반 프로그래밍에 익숙하지 않고 작업을 반환하고 시작되었는지 확인하기 위해 새로운 방법을 사용합니다. 제가 일해야하는 코드는 제가 기대했던 것이 아니 었습니다. 콘솔 응용 프로그램은 다음과 같다 :반환되는 작업 및이 작업 상태가 이유는 무엇입니까? 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.Running에 비해 TaskStatus.RanToCompletion 같은 상태가된다 루프가 아직 실행 중입니까? RunSomething 작업 자체보다는 스레드 풀에 RunSomething 작업을 넣는 작업의 상태를 확인하고 있습니까?