2013-08-02 2 views
8

C# 4.0으로 이식하는 C# 2.0 코드가 있습니다. System.ThreadPool.QueueueUserWorkItem 대신 System.Task을 사용하고 싶습니다. 또한 System.Threading.Timer 대신 System.Task을 사용하고 싶습니다.주기적 작업을 만드는 방법

주기적으로 System.Task을 어떻게 만듭니 까? System.Task 또는 System.TaskFactory에 아무 것도 표시되지 않습니다. 고려

종류와 관련,

pKumara

+0

는'Timer' 문제점은 무엇입니까? 원할 경우 타이머 콜백을 사용하여 새 작업을 시작할 수 있습니다. –

+1

[System.Threading.Timer에 대한 작업 기반 대체가 있습니까?] (http://stackoverflow.com/questions/4890915/is-there-a-task-based-replacement-for-system-threading- 타이머) –

답변

3

당신은 타이머의 관찰 순서를 돌려줍니다 Observable.Timer으로 시도 할 수 있습니다.

18

Observable.Interval 또는 Observable.Timer를 사용하십시오. 타이머를 통해 만기일을 통과 할 수 있습니다.

e.q.

  // Repeat every 2 seconds. 
     IObservable<long> observable = Observable.Interval(TimeSpan.FromSeconds(2)); 

     // Token for cancelation 
     CancellationTokenSource source = new CancellationTokenSource(); 

     // Create task to execute. 
     Action action = (() => Console.WriteLine("Action started at: {0}", DateTime.Now)); 
     Action resumeAction = (() => Console.WriteLine("Second action started at {0}", DateTime.Now)); 

     // Subscribe the obserable to the task on execution. 
     observable.Subscribe(x => { Task task = new Task(action); task.Start(); 
             task.ContinueWith(c => resumeAction()); 
     }, source.Token); 

enter image description here

+0

많은 감사. 귀하의 답변을 수락하려고하는데 알 수없는 오류가 발생했습니다. –

+0

이상하지만, 당신의 질문에 기뻐했습니다! –

+2

Observable 네임 스페이스를 사용하려면 NuGet 패키지에서'Reactive Extensions - Query library'를 추가해야합니다. – douglaslps

관련 문제