Trong một vài dự án trước đây của tôi, tôi đã gặp phải các tình huống mà tôi cần phải chuyển nhiều tham số đến phương thức gọi lại Threading.Timer
. Thật không may, hàm tạo chỉ chấp nhận một tham số object
duy nhất. Không muốn sử dụng các biến toàn cục, mẫu mà tôi đã bắt đầu sử dụng để khắc phục vấn đề này là chuyển qua một phương thức ẩn danh khi bộ đếm thời gian được tạo và sử dụng khả năng của trình biên dịch để nắm bắt các biến số của tôi, như vậy:Cách tốt nhất để chuyển nhiều tham số đến phương thức gọi lại Threading.Timer là gì?
public void SendEmailsRepeatedly(IEnumerable<SimpleEmail> emails, int sendRepeatedlyDelayMS)
{
Tokenizer tokenizer = new StandardTokenizer();
sendRepeatedlyTimer = new Timer(
SendRepeatedlyCallback,
(Action)delegate()
{
TokenizeAndSendEmails(emails, tokenizer);
},
0,
sendRepeatedlyDelayMS);
}
private void SendRepeatedlyCallback(object state)
{
if (!abort)
{
Action sendEmails = (Action)state;
sendEmails();
}
}
Vì vậy, câu hỏi của tôi là, đây có phải là một bản hack lỗi không? Có cách nào tốt hơn hoặc được khuyến nghị để làm điều này?
Tôi sẽ đưa nó cho bạn vì đây có lẽ là cách tiếp cận "dễ đọc nhất" và Tôi chắc chắn rằng đồng nghiệp của tôi đã nhầm lẫn đủ với hầu hết mã của tôi. –
Tôi không thấy bất kỳ lợi ích nào trong việc này. Tại sao tạo ra một lớp học cho mình khi trình biên dịch có thể làm tất cả công việc soạn sẵn cho bạn? –
@Jon Bạn có một điểm và tôi cũng là một fan hâm mộ đẩy bàn đạp vào kim loại với trình biên dịch. Tuy nhiên, tôi cũng nghĩ rằng có một số tình huống tốt để làm cho mã tiết kiệm hơn một chút chỉ để những người khác có thể hiểu được nó mà không gặp khó khăn gì. Ngược lại, có thể lập luận rằng tôi chỉ nên thêm nhiều ý kiến nội tuyến hơn. –