Trong quá trình phát triển phần mềm, đôi khi chúng ta cần kiểm tra dữ liệu trong cơ sở dữ liệu theo định kỳ và kích hoạt hành động khi tìm thấy dữ liệu mới. Để đạt được yêu cầu này, chúng tôi sẽ tiến hành một cuộc trình diễn đơn giản trên .Net 7.
Bộ đếm thời gian định kỳ
Lớp PeriodicTimer mới được thêm vào .Net 6, có thể được sử dụng để tạo bộ đếm thời gian gọi hàm gọi lại theo các khoảng thời gian cố định. Hướng dẫn sử dụng:
sử dụng var hẹn giờ = mới PeriodicTimer(TimeSpan.FromSeconds( 10));
trong khi ( chờ bộ đếm thời gian.WaitForNextTickAsync()
{
Thao tác này sẽ thực hiện cứ mỗi 10 giây.
Ưu điểm của PeriodicTimer so với Timer truyền thống là:
- PeriodicTimer sẽ cho phép chúng ta chờ không đồng bộ trong một khoảng thời gian xác định.
- Trong quá trình thực hiện lệnh gọi lại, chúng ta có thể ngăn chặn việc thực hiện lệnh gọi lại tiếp theo cho đến khi hoàn tất thao tác hiện tại.
Bối cảnhDịch vụ
Lớp BackgroundService trong AspNetCore là lớp trừu tượng triển khai giao diện IHostService và có thể được sử dụng để tạo các dịch vụ nền. Hướng dẫn sử dụng:
sử dụng Hệ thống;
sử dụng System.Threading;
sử dụng System.Threading.Tasks;
sử dụng Microsoft.Extensions.Hosting;
không gian tên Ứng dụng Console1
{
công cộng lớp học Dịch vụ kiểm tra cơ sở dữ liệu: Bối cảnhDịch vụ
{
được bảo vệ ghi đè Nhiệm vụ không đồng bộ Thực hiện không đồng bộ( CancellationToken dừngToken
{
trong khi (!stoppingToken.IsCancellationRequested)
{
Console.WriteLine( "Đang kiểm tra cơ sở dữ liệu...");
Trong ví dụ này, chúng ta kế thừa lớp BackgroundService và ghi đè phương thức ExecuteAsync. Phương thức ExecuteAsync được gọi khi dịch vụ nền khởi động và thoát khi tham số stoppingToken bị hủy. Chúng tôi sử dụng phương thức Task.Delay trong vòng lặp while để đợi 5 giây và gọi mã kiểm tra cơ sở dữ liệu mỗi lần qua vòng lặp.
Sử dụng kết hợp
Chúng ta có thể kết hợp PeriodicTimer và BackgroundService để triển khai dịch vụ nền kiểm tra cơ sở dữ liệu định kỳ. Mã như sau:
sử dụng Hệ thống;
sử dụng System.Threading;
sử dụng System.Threading.Tasks;
sử dụng Microsoft.Extensions.Hosting;
sử dụng Microsoft.Extensions.Logging;
không gian tên Ứng dụng Console1
{
công cộng lớp học Dịch vụ kiểm tra cơ sở dữ liệu: Bối cảnhDịch vụ
{
được bảo vệ ghi đè Nhiệm vụ không đồng bộ Thực hiện không đồng bộ( CancellationToken dừngToken
{
sử dụng var hẹn giờ = mới PeriodicTimer(TimeSpan.FromSeconds( 10));
trong khi (!stoppingToken.IsCancellationRequested)
{
nếu như ( chờ bộ đếm thời gian.WaitForNextTickAsync(stoppingToken))
{
Console.WriteLine( "Đang kiểm tra cơ sở dữ liệu...");
Tóm tắt
Trong bài viết này, chúng tôi giới thiệu cách sử dụng lớp PeriodicTimer và lớp BackgroundService trong .Net 7 để triển khai dịch vụ nền kiểm tra cơ sở dữ liệu định kỳ. Trong thực tế sử dụng, bạn sẽ gặp phải những tình huống phức tạp hơn. Bài viết này chỉ là một ví dụ đơn giản.
Liên kết tham khảo
Bài viết này được viết bằng Chat OpenAI, do đó hoàn toàn có thể có bất kỳ điểm tương đồng nào.
- Tác giả của bài viết này: newbe36524
- Liên kết đến bài viết này: https://www.newbe.pro/ChatAI/How-to-create-a-timer-host-service/
- Tuyên bố bản quyền: Tất cả các bài viết trong blog này đều được cấp phép theo thỏa thuận BY-NC-SA trừ khi có quy định khác. Vui lòng ghi rõ nguồn khi đăng lại!
Bộ đếm thời gian định kỳ: https://learn.microsoft.com/dotnet/api/system.threading.periodictimer?view=net-7.0&WT.mc_id=DX-MVP-5003606 .
Dịch vụ lưu trữ trong ASP.NET Core: https://learn.microsoft.com/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-6.0&WT.mc_id=DX-MVP-5003606 .
Cuối cùng, bài viết này về việc triển khai kiểm tra cơ sở dữ liệu theo lịch trình dưới .Net7 kết thúc tại đây. Nếu bạn muốn biết thêm về việc triển khai kiểm tra cơ sở dữ liệu theo lịch trình dưới .Net7, vui lòng tìm kiếm các bài viết trên CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!