Tôi có một dịch vụ Windows để sinh ra một tập hợp các hoạt động con trên các chủ đề riêng biệt và chỉ nên chấm dứt khi tất cả các hoạt động đó đã hoàn tất thành công. Tôi không biết trước phải mất bao lâu để chấm dứt hoạt động sau khi nhận được tín hiệu dừng. Trong OnStop(), tôi đợi trong khoảng thời gian cho tín hiệu dừng đó và tiếp tục yêu cầu thêm thời gian miễn là hệ thống sẵn sàng cấp nó.Chi phí an toàn cho RequestAdditionalTime() là gì?
Dưới đây là cấu trúc cơ bản:
class MyService : ServiceBase
{
private CancellationTokenSource stopAllActivities;
private CountdownEvent runningActivities;
protected override void OnStart(string[] args)
{
// ... start a set of activities that signal runningActivities
// when they stop
// ... initialize runningActivities to the number of activities
}
protected override void OnStop()
{
stopAllActivities.Cancel();
while (!runningActivities.Wait(10000))
{
RequestAdditionalTime(15000); // NOTE: 5000 added for overhead
}
}
}
Chỉ cần bao nhiêu "overhead" tôi nên có thêm trong RequestAdditionalTime
cuộc gọi? Tôi lo ngại rằng các yêu cầu được tích lũy, thay vì dựa vào thời điểm khi mỗi cuộc gọi RequestAdditionalTime
được thực hiện. Nếu trường hợp đó xảy ra, việc thêm phí trên có thể khiến hệ thống từ chối yêu cầu vì nó quá xa trong tương lai. Nhưng nếu tôi không thêm bất kỳ chi phí nào thì dịch vụ của tôi có thể bị chấm dứt trước khi nó có cơ hội yêu cầu khối tiếp theo của thời gian bổ sung.