class Program
{
static void Main(string[] args)
{
// cancellation by keyboard string
CancellationTokenSource cts = new CancellationTokenSource();
// thread that listens for keyboard input
var kbTask = Task.Run(() =>
{
while(true)
{
string userInput = Console.ReadLine();
if(userInput == "c")
{
cts.Cancel();
break;
}
else
{
// handle input
Console.WriteLine("Executing user command {0}...", userInput);
}
}
});
// thread that performs main work
Task.Run(() => DoWork(), cts.Token);
Console.WriteLine("Type commands followed by 'ENTER'");
Console.WriteLine("Enter 'C' to end program.");
Console.WriteLine();
// keep Console running until cancellation token is invoked
kbTask.Wait();
}
static void DoWork()
{
while(true)
{
Thread.Sleep(3000);
Console.WriteLine("Doing work...");
}
}
}
아니요 작동하지 않습니다 ... 콘솔에 무엇인가를 입력하면 종료됩니다. – user3228693
당신은 정확합니다 ... 지금 바로 ... – mdisibio
@ user3228693 사용자 입력에 의해서만 스레드를 취소하는 모델을 기반으로 한 첫 번째 게시물에 사과드립니다. 여러 명령을 입력하려면 리스너 스레드를 루프에서 실행해야합니다. 또한 샘플을 실행하고 개념을 설명 할 수 있도록 더미 작업자 스레드를 추가했습니다. – mdisibio