Chủ đề của Advanced Cross-Platform Application Programming With .NET - Lập trình ứng dụng đa nền tảng nâng cao với .NET

PRN222 - Chương 8: Worker Service và tác vụ nền

Worker Service và tác vụ nền trong PRN222: lớp BackgroundService, interface IHostedService và namespace Microsoft.Extensions.Hosting. Nội dung chương còn gồm override ExecuteAsync, CancellationToken để dừng dịch vụ êm, vòng lặp kết hợp Task.Delay chạy theo chu kỳ, StartAsync và StopAsync, đăng ký worker trong Program.cs, đọc cấu hình từ appsettings.json qua dependency injection, xử lý message hàng đợi và lý do không dùng Task.Run trong controller. Học xong chương này, người học viết được dịch vụ chạy nền theo chu kỳ và dừng êm khi nhận tín hiệu huỷ.

Xem danh sách câu hỏi20 câu hỏi100% có giải thích

Bắt đầu bằng Chế độ học nếu bạn muốn đáp án và giải thích hiện ngay sau mỗi câu — không bấm giờ, dừng lúc nào cũng được. Chọn Thi thử khi muốn biết mình đang ở đâu: có bấm giờ, chấm điểm ở cuối, và giải thích chỉ mở sau khi nộp.

Học ngân hàng câu hỏi của chủ đề

Luyện tập theo chủ đề này

20Câu hỏi hiện có

Câu hỏi của chủ đề

20/20 câuHết danh sách
1How do you implement a background task using a Worker Service?4 lựa chọnDễ75% trả lời đúng
ABy writing JavaScript functions.
BBy overriding the ExecuteAsync(CancellationToken) method in a class derived from BackgroundService.
CBy using static HTML files.
DBy using database queries.
Lời giải
Để thực hiện một nhiệm vụ nền (background task) bằng cách sử dụng dịch vụ Worker, bạn cần tạo một lớp kế thừa từ BackgroundService. Lớp này sẽ chứa phương thức ExecuteAsync, nơi bạn thực hiện logic của nhiệm vụ nền. Phương thức này sẽ được gọi tự động bởi dịch vụ Worker khi nó được khởi tạo. Bạn cũng có thể sử dụng phương thức StartAsync để bắt đầu nhiệm vụ nền ngay lập tức. Ngoài ra, bạn có thể sử dụng các thuộc tính và phương thức khác của lớp BackgroundService để quản lý và giám sát nhiệm vụ nền.
Mở trang câu hỏi này →
ATo manage database transactions.
BTo allow the service to be gracefully stopped.
CTo encrypt data.
DTo manage user sessions.
Lời giải
CancellationToken là một tham số quan trọng trong phương thức ExecuteAsync(CancellationToken) trong lập trình. Mục đích chính của tham số này là cho phép dịch vụ được dừng một cách êm ái (gracefully stopped) khi cần thiết. Điều này có nghĩa là khi dịch vụ cần được dừng lại, tham số CancellationToken sẽ được đặt thành trạng thái đã hủy (canceled), từ đó cho phép dịch vụ thực hiện các hành động cần thiết để dừng lại một cách an toàn và không gây ra lỗi. Ví dụ, dịch vụ có thể thoát khỏi các nguồn hệ thống, đóng các kết nối mạng, hoặc thực hiện các hành động khác cần thiết để dừng lại một cách êm ái. Mục đích của CancellationToken là đảm bảo rằng dịch vụ được dừng lại một cách an toàn và không gây ra lỗi khi cần thiết.
Mở trang câu hỏi này →
3Consider this C# code:4 lựa chọncó codeDễ100% trả lời đúng
Đề bài
public class Worker : BackgroundService {
  protected override Task ExecuteAsync(CancellationToken stoppingToken) {
    return Task.CompletedTask;
  }
}

What is ExecuteAsync?

AThe entry point for background execution.
BThe constructor.
CA logging method.
DA thread initializer.
Lời giải
Trong mã nguồn C#, ExecuteAsync là phương thức được sử dụng để thực hiện các tác vụ nền (background tasks). Nó là phương thức được gọi khi một đối tượng thực hiện các tác vụ nền (background service) được tạo ra. Phương thức này được sử dụng để thực hiện các tác vụ nền một cách độc lập và không ảnh hưởng đến luồng chính của chương trình. Trong ví dụ trên, Worker là một lớp thực hiện các tác vụ nền và ExecuteAsync là phương thức được sử dụng để thực hiện các tác vụ nền này. Phương thức ExecuteAsync được gọi khi Worker được tạo ra và nó sẽ thực hiện các tác vụ nền một cách độc lập.
Mở trang câu hỏi này →
4Which scenarios are most suitable for Worker Services?4 lựa chọnDễ100% trả lời đúng
AProcessing queue messages
BRunning Blazor UI
CDisplaying Razor Pages
DHosting REST APIs only
Lời giải
Các kịch bản phù hợp nhất cho Worker Services là các trường hợp xử lý hàng đợi (queue messages). Worker Services được thiết kế để chạy trong nền và xử lý các tác vụ lặp đi lặp lại, chẳng hạn như xử lý hàng đợi. Điều này giúp giảm tải cho ứng dụng web và cải thiện hiệu suất. Ngoài ra, Worker Services cũng có thể được sử dụng để chạy các tác vụ độc lập, chẳng hạn như gửi email hoặc thông báo. Tuy nhiên, các kịch bản như chạy UI Blazor, hiển thị Razor Pages hoặc chỉ hosting REST APIs không phù hợp với Worker Services vì chúng yêu cầu tương tác trực tiếp với người dùng hoặc yêu cầu hiển thị UI.
Mở trang câu hỏi này →
ATo handle HTTP requests.
BTo define the main logic of the background task.
CTo manage database connections.
DTo define user interfaces.
Lời giải
Phương thức ExecuteAsync(CancellationToken) trong lớp BackgroundService có vai trò quan trọng trong việc định nghĩa logic chính của nhiệm vụ chạy nền. Phương thức này được gọi khi BackgroundService được khởi tạo và sẽ chạy liên tục cho đến khi ứng dụng bị dừng. Trong phương thức này, bạn có thể thực hiện các tác vụ như đọc dữ liệu từ cơ sở dữ liệu, xử lý dữ liệu, gửi thông báo, v.v. Mục đích chính của phương thức này là thực hiện các tác vụ nền mà không ảnh hưởng đến giao diện người dùng. Ví dụ, bạn có thể sử dụng phương thức này để gửi thông báo hàng ngày hoặc hàng giờ, hoặc để cập nhật dữ liệu trên cơ sở dữ liệu.
Mở trang câu hỏi này →
6What is the main purpose of a Worker Service in .NET?4 lựa chọnDễ100% trả lời đúng
ATo replace MVC controllers.
BTo create a long-running background service.
CTo manage static website hosting.
DTo handle UI rendering.
Lời giải
Một Worker Service trong .NET là một loại ứng dụng nền tảng được thiết kế để chạy trong nền và thực hiện các tác vụ dài hạn mà không cần tương tác trực tiếp với người dùng. Mục đích chính của một Worker Service là tạo ra các dịch vụ nền tảng có thể chạy trong thời gian dài mà không bị gián đoạn, chẳng hạn như gửi email hàng ngày, cập nhật dữ liệu trong cơ sở dữ liệu, hoặc thực hiện các tác vụ khác mà không cần người dùng tương tác trực tiếp. Điều này giúp tăng cường hiệu suất và giảm tải cho ứng dụng web chính.
Mở trang câu hỏi này →
7What is the typical lifetime of a Worker Service?4 lựa chọnDễ86% trả lời đúng
AOnly for the duration of an HTTP request.
BUntil the application is manually stopped.
COnly for the duration of a database transaction.
DOnly for the duration of a user session.
Lời giải
Một Worker Service trong ASP.NET Core là một loại ứng dụng web không tương tác, chạy nền và không có giao diện người dùng. Nó được sử dụng để thực hiện các tác vụ lặp đi lặp lại, chẳng hạn như gửi email, cập nhật dữ liệu cơ sở dữ liệu hoặc thực hiện các tác vụ khác mà không cần tương tác với người dùng. Thời gian tồn tại của một Worker Service thường kéo dài cho đến khi ứng dụng được dừng lại thủ công. Điều này có nghĩa là Worker Service sẽ tiếp tục chạy cho đến khi ứng dụng được dừng lại hoặc bị lỗi. Điều này cho phép Worker Service thực hiện các tác vụ lặp đi lặp lại mà không cần phải khởi động lại sau mỗi lần thực hiện.
Mở trang câu hỏi này →
8Which method is called when the application is shutting down?4 lựa chọnDễ100% trả lời đúng
AStartAsync()
BStopAsync()
CRunAsync()
DExecute()
Lời giải
Khi ứng dụng đang shutting down, phương thức được gọi là khi ứng dụng đang tắt. Phương thức này thường được sử dụng để thực hiện các hành động cần thiết trước khi ứng dụng tắt, chẳng hạn như lưu trữ dữ liệu tạm thời, kết nối mạng, hoặc thực hiện các tác vụ cuối cùng. Trong trường hợp này, phương thức được gọi là StopAsync().
Mở trang câu hỏi này →
9How do you handle configuration settings in a Worker Service?4 lựa chọnDễ100% trả lời đúng
ABy writing JavaScript functions.
BBy using appsettings.json and dependency injection.
CBy using static HTML files.
DBy using database queries.
Lời giải
Để xử lý các thiết lập cấu hình trong một Worker Service, bạn có thể sử dụng file appsettings.json và dependency injection. File appsettings.json được sử dụng để lưu trữ các giá trị cấu hình dưới dạng key-value, trong khi dependency injection giúp bạn có thể dễ dàng inject các giá trị cấu hình vào các lớp của ứng dụng. Điều này giúp bạn có thể dễ dàng quản lý và thay đổi các thiết lập cấu hình mà không cần phải sửa đổi mã nguồn của ứng dụng. Ngoài ra, sử dụng appsettings.json và dependency injection còn giúp bạn có thể dễ dàng phân chia và quản lý các giá trị cấu hình giữa các môi trường khác nhau, chẳng hạn như môi trường phát triển, thử nghiệm và sản xuất.
Mở trang câu hỏi này →
10What interface does BackgroundService implement internally?4 lựa chọnDễ80% trả lời đúng
AIDisposable
BIWorker
CIHostedService
DIController
Lời giải
BackgroundService là một lớp trong .NET Core được sử dụng để tạo các dịch vụ chạy nền. Nó thực hiện một số giao diện quan trọng, bao gồm IHostedService. Giao diện IHostedService cho phép các dịch vụ chạy nền được quản lý và khởi động bởi IWebHost. Điều này cho phép các dịch vụ chạy nền được khởi động và dừng cùng với ứng dụng. Ngoài ra, giao diện IHostedService cũng cung cấp các phương thức như StartAsync và StopAsync để quản lý trạng thái của dịch vụ chạy nền. Vì vậy, khi nói về giao diện mà BackgroundService thực hiện nội bộ, câu trả lời chính xác là IHostedService.
Mở trang câu hỏi này →
11Which base class is commonly used to implement a Worker Service?4 lựa chọnDễ100% trả lời đúng
AControllerBase
BBackgroundService
CDbContext
DViewComponent
Lời giải
Để thực hiện một Worker Service, bạn thường sử dụng lớp cơ sở BackgroundService. Lớp này được thiết kế để chạy nền và thực hiện các tác vụ lặp đi lặp lại mà không cần tương tác trực tiếp với người dùng. BackgroundService cung cấp các phương thức như StartAsync và StopAsync để quản lý vòng đời của dịch vụ. Ngoài ra, nó cũng hỗ trợ các tính năng như đồng bộ hóa và lỗi để giúp bạn xây dựng các dịch vụ đáng tin cậy và hiệu quả.
Mở trang câu hỏi này →
12Consider this C# code:4 lựa chọncó codeDễ100% trả lời đúng
Đề bài
public class EmailWorker : BackgroundService {
  protected override async Task ExecuteAsync(CancellationToken stoppingToken) {
    while (!stoppingToken.IsCancellationRequested) {
      SendEmails();
      await Task.Delay(60000, stoppingToken);
    }
  }
}

What does this service do?

ASends emails every minute.
BSends emails once.
CLogs emails only.
DIgnores shutdown signals.
Lời giải
Dịch vụ EmailWorker được triển khai dựa trên lớp BackgroundService trong C#. Lớp này thực hiện việc gửi email một cách lặp đi lặp lại. Trong phương thức ExecuteAsync, dịch vụ này sẽ tiếp tục gửi email cho đến khi nhận được tín hiệu hủy bỏ. Trong mỗi vòng lặp, dịch vụ sẽ gọi phương thức SendEmails để gửi email và sau đó chờ 1 phút trước khi tiếp tục. Điều này cho thấy dịch vụ sẽ gửi email mỗi phút một lần.
Mở trang câu hỏi này →
13Where is the Worker Service configured in a .NET Core application?4 lựa chọnDễ100% trả lời đúng
AProgram.cs
BApp.cs
Cappsettings.json
DlaunchSettings.json
Lời giải
Trong một ứng dụng .NET Core, Worker Service được cấu hình ở đâu?
Mở trang câu hỏi này →
14Which namespace contains the BackgroundService class?4 lựa chọnTrung bình60% trả lời đúng
ASystem.Threading
BMicrosoft.Extensions.Hosting
CMicrosoft.Extensions.Logging
DSystem.ServiceProcess
Lời giải
Namespace chứa lớp BackgroundService là Microsoft.Extensions.Hosting. Lớp BackgroundService là một lớp cơ bản trong framework .NET Core, được sử dụng để tạo các dịch vụ chạy nền. Nó cho phép bạn tạo các dịch vụ có thể chạy nền mà không cần phải tạo một ứng dụng Windows Service. Để sử dụng BackgroundService, bạn cần thêm Microsoft.Extensions.Hosting vào dự án của mình. Sau đó, bạn có thể tạo một lớp con của BackgroundService và thực hiện các tác vụ cần thiết trong phương thức Run().
Mở trang câu hỏi này →
15What is the primary purpose of a .NET Worker Service?4 lựa chọnDễ100% trả lời đúng
ATo build web applications.
BTo build desktop applications.
CTo build long-running background tasks or services.
DTo build mobile applications.
Lời giải
Một .NET Worker Service là một loại ứng dụng .NET Core được thiết kế để chạy trong nền và thực hiện các tác vụ chạy trong nền lâu dài. Mục đích chính của một .NET Worker Service là chạy các tác vụ nền trong thời gian dài mà không cần tương tác trực tiếp từ người dùng. Điều này có thể bao gồm các tác vụ như gửi email hàng ngày, cập nhật dữ liệu trong cơ sở dữ liệu hoặc thực hiện các tác vụ khác mà không cần người dùng phải chờ đợi. .NET Worker Service cung cấp một cách linh hoạt để xây dựng các ứng dụng chạy trong nền mà không cần phải tạo một ứng dụng web hoặc desktop.
Mở trang câu hỏi này →
ATask.Run()
BIHostedService
CBackgroundService
DWorker Service
Lời giải
Khi thực hiện công việc nền trong thời gian dài trong các controller, chúng ta cần chọn phương pháp phù hợp để tránh gây ra các vấn đề về hiệu suất và bảo trì. Phương pháp Task.Run() không nên được sử dụng cho các công việc nền này vì nó sẽ chiếm dụng luồng chính của ứng dụng và gây ra các vấn đề về hiệu suất. Ngoài ra, Task.Run() không cung cấp các tính năng cần thiết để quản lý và giám sát các công việc nền, chẳng hạn như khả năng bắt đầu và dừng lại, cũng như khả năng phục hồi sau khi ứng dụng bị restart. Thay vào đó, chúng ta nên sử dụng các phương pháp như IHostedService, BackgroundService và Worker Service để thực hiện các công việc nền trong thời gian dài. Những phương pháp này cung cấp các tính năng cần thiết để quản lý và giám sát các công việc nền, giúp chúng ta dễ dàng bảo trì và hiệu suất cao hơn.
Mở trang câu hỏi này →
Abuilder.Services.AddControllers()
Bbuilder.Services.AddRazorPages()
Cbuilder.Services.AddMvc()
Dbuilder.Services.AddViews()
Lời giải
Để đăng ký dịch vụ Razor Pages vào container DI trong Program.cs, bạn cần sử dụng phương thức builder.Services.AddRazorPages(). Phương thức này cho phép ASP.NET Core biết rằng ứng dụng của bạn sử dụng Razor Pages và cần đăng ký các dịch vụ liên quan. Khi bạn gọi phương thức này, các dịch vụ cần thiết cho Razor Pages sẽ được đăng ký vào container DI, bao gồm các dịch vụ như Razor Pages Model, Razor Pages Controller, v.v. Điều này cho phép bạn sử dụng các tính năng của Razor Pages trong ứng dụng của mình.
Mở trang câu hỏi này →
AIController
BIDbContext
CIHostedService
DIViewComponent
Lời giải
Để được đăng ký như một dịch vụ được lưu trữ trong .NET, một lớp phải thực hiện một giao diện cụ thể. Giao diện này cho phép lớp đó được quản lý và chạy trong môi trường ứng dụng. Trong các lựa chọn đã cho, giao diện "IHostedService" là giao diện cần được thực hiện để đăng ký lớp như một dịch vụ được lưu trữ. Giao diện này cung cấp các phương thức để quản lý vòng đời của dịch vụ, chẳng hạn như phương thức StartAsync và StopAsync. Bằng cách thực hiện giao diện này, lớp có thể được đăng ký như một dịch vụ được lưu trữ và chạy trong môi trường ứng dụng.
Mở trang câu hỏi này →
AWorker Service integrates better with .NET features like DI and Logging
BWorker Service is UI-based
CWorker Service cannot be published
DWorker Service only runs on Windows
Lời giải
Đáp án đúng: "integrates better with .NET features like DI and Logging". Worker Service là mẫu dự án .NET dựng sẵn Generic Host, nhờ đó có ngay Dependency Injection, Logging, Configuration, IHostedService và quản lý vòng đời khởi động - tắt êm. Đó là lý do chính để chọn nó thay vì viết Windows Service thuần. Phương án "Worker Service is UI-based" sai vì Worker Service không có giao diện; phương án "Worker Service cannot be published" sai vì hoàn toàn xuất bản và cài đặt được như một dịch vụ Windows hoặc systemd; phương án "Worker Service only runs on Windows" sai vì đây là ứng dụng .NET đa nền tảng, chạy được cả trên Linux và trong container.
Mở trang câu hỏi này →
20Which method stops a hosted service?4 lựa chọn
AStopAsync()
BEndAsync()
CseAsync()
DShutdownAsync()
Lời giải
Đáp án đúng: "StopAsync()". Giao diện IHostedService định nghĩa đúng hai phương thức: StartAsync(CancellationToken) được host gọi khi khởi động và StopAsync(CancellationToken) được gọi khi ứng dụng tắt để dịch vụ dọn dẹp và kết thúc êm. Lớp BackgroundService hiện thực hoá sẵn cặp này và cho ta ghi đè ExecuteAsync. Các tên EndAsync(), seAsync() và ShutdownAsync() không tồn tại trong hợp đồng IHostedService nên đều không phải phương thức dừng dịch vụ.
Mở trang câu hỏi này →

Đề có câu hỏi của chủ đề này

4 đề chứa ít nhất một câu thuộc chủ đề — mở đề để làm cả bộ, không chỉ từng câu.