2017-10-10 15 views
0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 
using System.Threading.Tasks; 

namespace CancellationTokenExperiments 
{ 
    class CancellationTokenTest 
    { 
     static void Main(string[] args) 
     { 
      CancellationTokenSource tokenSource = new CancellationTokenSource(); 
      CancellationToken token = tokenSource.Token; 
      tokenSource.Cancel(); 
      Task.Run(() => Console.WriteLine("Hello from Task"), token); 

     } 
    } 
} 

C#의 cancellationTokens 개념을 이해하려고합니다. 작업을 실행하기 전에 토큰을 확인했기 때문에 위의 코드는 "Hello from Task"를 인쇄하지 않는다는 것을 이해합니다.C#의 취소 토큰 이해

그러나 몇 가지 질문이 있습니다.

  1. Task.Run(() => Console.WriteLine("Hello from Task"), token);

위의 문장은 무엇을 의미합니까? 의미에서 단순히 어떻게 Console.WriteLine("Hello from Task") 전화와는 다른가요? 토큰을 전달하여 Task을 취소 할 수 있습니까? 또한 빈 괄호 ()은 처음에 Task.Run의 처음에 무엇을 의미합니까?

  1. 시간의 특정 인스턴스에서 실행을 중지 할 수 있도록 위의 코드를 어떻게 변경합니까?
+1

"토큰을 전달하여 작업을 취소 할 수 있습니까?"- 아니요, 작업의 코드는 실행 중에 취소 토큰을 검사하고 취소가 요청되면 종료해야합니다. 취소 요청이 있기 때문에 작업이 마술처럼 중단되지는 않습니다. – Enigmativity

+0

동일한 제목을 가지고 있더라도 실제로는 중복으로 표시된 것과 같은 질문이 아닙니다. 질문의 내용과 묻는 질문이 다릅니다. –

답변

-1

먼저 빈 괄호는 매개 변수가없는 람다 식의 구문입니다.

() => Console.WriteLine("Hello from Task") 

실행할 작업으로 전달되는 함수를 만듭니다.

취소의 가치는 여러 개의 동시 작업 (일반적으로 스레드 전반)을 관리 할 때 발생합니다. 신뢰할 수있는 크로스 스레드 동기화 및 취소는 멀티 스레드 프로그래밍에 대한 작업과 이해가 필요하며 취소 토큰을 사용하면이를 단순화하고 많은 초보자 함의 흔적을 없앨 수 있습니다.

토큰은 백그라운드에서 장기 실행 프로세스를 시작한 다음 완료되기 전에 취소하려는 경우에 사용됩니다.

+0

'()'는 함수에 매개 변수가 없다는 것을 의미합니까? 이 예제에서는 'string'을 매개 변수로 사용합니다. – liv2hak

+0

@ liv2hak -'()'는 **에 전달 된 매개 변수 **가 없음을 의미합니다. 'Console.WriteLine'에 대한 호출은 매개 변수를 가지고 있지만 ** 전달되지 않았습니다 **. – Enigmativity

+0

@ Samuel Neff - 문자열에 전달할 람다를 어떻게 수정합니까? – liv2hak