Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
.NET menyediakan tiga timer untuk digunakan di lingkungan multithreaded:
- System.Threading.Timer, yang menjalankan metode panggilan balik tunggal pada ThreadPool utas secara berkala.
- System.Timers.Timer, yang secara default menaikkan peristiwa pada ThreadPool utas secara berkala.
- System.Threading.PeriodicTimer, yang memungkinkan pemanggil untuk melakukan pekerjaan setelah menunggu kutu individu dari timer.
Nota
Beberapa implementasi .NET mungkin mencakup timer tambahan:
- System.Windows.Forms.Timer: komponen Windows Forms yang mengaktifkan peristiwa secara berkala. Komponen ini tidak memiliki antarmuka pengguna dan dirancang untuk digunakan dalam lingkungan utas tunggal.
- System.Web.UI.Timer: komponen ASP.NET yang melakukan postback halaman web asinkron atau sinkron secara berkala.
- System.Windows.Threading.DispatcherTimer: timer yang diintegrasikan ke dalam Dispatcher antrean yang diproses pada interval waktu tertentu dan pada prioritas tertentu.
Kelas System.Threading.Timer
Kelas ini System.Threading.Timer memungkinkan Anda untuk terus memanggil delegasi pada interval waktu yang ditentukan. Anda juga dapat menggunakan kelas ini untuk menjadwalkan satu panggilan ke delegasi dalam interval waktu tertentu. Delegasi dijalankan pada ThreadPool utas.
Saat Anda membuat System.Threading.Timer objek, Anda menentukan TimerCallback delegasi yang menentukan metode panggilan balik, objek status opsional yang diteruskan ke panggilan balik, jumlah waktu untuk menunda sebelum pemanggilan panggilan balik pertama, dan interval waktu antara pemanggilan panggilan balik. Untuk membatalkan timer yang tertunda, panggil Timer.Dispose metode .
Contoh berikut membuat timer yang memanggil delegasi yang disediakan untuk pertama kalinya setelah satu detik (1000 milidetik) lalu memanggilnya setiap dua detik. Objek status dalam contoh digunakan untuk menghitung berapa kali delegasi dipanggil. Timer dihentikan ketika delegasi telah dipanggil setidaknya 10 kali.
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
private static Timer timer;
static void Main(string[] args)
{
var timerState = new TimerState { Counter = 0 };
timer = new Timer(
callback: new TimerCallback(TimerTask),
state: timerState,
dueTime: 1000,
period: 2000);
while (timerState.Counter <= 10)
{
Task.Delay(1000).Wait();
}
timer.Dispose();
Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: done.");
}
private static void TimerTask(object timerState)
{
Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: starting a new callback.");
var state = timerState as TimerState;
Interlocked.Increment(ref state.Counter);
}
class TimerState
{
public int Counter;
}
}
Imports System.Threading
Module Program
Private Timer As Timer
Sub Main(args As String())
Dim StateObj As New TimerState
StateObj.Counter = 0
Timer = New Timer(New TimerCallback(AddressOf TimerTask), StateObj, 1000, 2000)
While StateObj.Counter <= 10
Task.Delay(1000).Wait()
End While
Timer.Dispose()
Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: done.")
End Sub
Private Sub TimerTask(ByVal StateObj As Object)
Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: starting a new callback.")
Dim State As TimerState = CType(StateObj, TimerState)
Interlocked.Increment(State.Counter)
End Sub
Private Class TimerState
Public Counter As Integer
End Class
End Module
Untuk informasi dan contoh selengkapnya, lihat System.Threading.Timer.
Kelas System.Timers.Timer
Timer lain yang dapat digunakan di lingkungan multithreaded adalah System.Timers.Timer bahwa secara default menaikkan peristiwa pada ThreadPool utas.
Saat membuat System.Timers.Timer objek, Anda dapat menentukan interval waktu untuk menaikkan Elapsed peristiwa.
Enabled Gunakan properti untuk menunjukkan apakah timer harus menaikkan Elapsed peristiwa. Jika Anda memerlukan peristiwa untuk Elapsed dinaikkan hanya sekali setelah interval yang ditentukan berlalu, atur ke AutoResetfalse. Nilai AutoReset default properti adalah true, yang berarti bahwa peristiwa Elapsed dinaikkan secara teratur pada interval yang Interval ditentukan oleh properti .
Untuk informasi dan contoh selengkapnya, lihat System.Timers.Timer.
Kelas System.Threading.PeriodicTimer
Kelas ini System.Threading.PeriodicTimer memungkinkan Anda untuk menunggu tanda centang individual dari interval tertentu, melakukan pekerjaan setelah memanggil PeriodicTimer.WaitForNextTickAsync.
Saat membuat System.Threading.PeriodicTimer objek, Anda menentukan TimeSpan yang menentukan lamanya waktu antara setiap tick timer. Alih-alih meneruskan panggilan balik atau mengatur penanganan aktivitas seperti di kelas timer sebelumnya, Anda melakukan pekerjaan langsung dalam cakupan, menunggu WaitForNextTickAsync untuk memajukan timer dengan interval yang ditentukan.
Metode WaitForNextTickAsync mengembalikan ValueTask<bool>; true setelah berhasil menembakkan timer, dan false ketika timer telah dibatalkan dengan memanggil PeriodicTimer.Dispose.
WaitForNextTickAsync secara opsional menerima CancellationToken, yang menghasilkan TaskCanceledException ketika pembatalan telah diminta.
Untuk informasi selengkapnya, lihat System.Threading.PeriodicTimer .