PeriodicTimer는 비동기 방식으로 타이머 틱을 처리하는 최신 타이머 API 입니다. 다음처럼 사용할 수 있고요,
var timer = new PeriodicTimer(TimeSpan.FromSeconds(1));
while (await timer.WaitForNextTickAsync())
{
Console.WriteLine(DateTime.Now);
}
1초 간격으로 실행되는 결과를 확인할 수 있습니다.
| 실행 결과
2021-11-18 오후 11:14:17
2021-11-18 오후 11:14:18
2021-11-18 오후 11:14:19
2021-11-18 오후 11:14:20
2021-11-18 오후 11:14:21
얼핏 보면 Task.Delay()의 기능과 별반 차이가 없어 보이죠? 차이가 있습니다. 다음의 코드를 보시죠.
var timer = new PeriodicTimer(TimeSpan.FromSeconds(2));
while (await timer.WaitForNextTickAsync())
{
Console.WriteLine($"Wake Up!: {DateTime.Now}");
// 1500 ms 소요되는 처리가 발생했다고 가정
Thread.Sleep(1500);
}
| 실행 결과
Wake Up!: 2021-11-18 오후 11:18:56
Wake Up!: 2021-11-18 오후 11:18:58
Wake Up!: 2021-11-18 오후 11:19:00
Wake Up!: 2021-11-18 오후 11:19:02
Wake Up!: 2021-11-18 오후 11:19:04
강제로 1500 ms 만큼의 딜레이를 줬음에도 불구하고 지정한 period 만큼의 타이머 틱을 제공합니다.
타이머 동작 중 취소하는 기능이 있을까요? WaitForNextTickAsync(cancellationToken)를 통해 취소도 가능합니다. 하지만 좀 더 쉽게 취소하는 방법은 timer를 Dispose하는 것입니다.
'wpf' 카테고리의 다른 글
dynamic property 에서 Set을 할떄 (0) | 2022.12.05 |
---|---|
public (string name, int age) GetUser() (0) | 2022.10.26 |
2개의 LIST 비교 하는것 (0) | 2021.11.18 |
싱글톤 쓰기 (0) | 2021.08.24 |
Combox 에 Enum 바인딩 (0) | 2021.05.06 |