Sự khác nhau giữa hai đoạn mã dưới đây là gì? Sẽ có bất kỳ vấn đề bằng cách sử dụng thứ hai?Biểu thức luồng và lambda
Kịch bản 1:
private void Log(Exception e)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(Log), e);
}
private void Log(object obj)
{
Exception e = (Exception)obj;
Logger.Log(e);
}
Kịch bản 2
private void Log(Exception e)
{
ThreadPool.QueueUserWorkItem(
(obj) =>
{
Logger.Log(e);
});
}
Trong kịch bản 2, tôi không đi qua các ngoại lệ trong như một paramter để ThreadPool. Làm thế nào để marshalling thread của đối tượng ngoại lệ xảy ra? Sẽ có vấn đề gì không? Những hạn chế của việc này là gì nếu có? Ưu điểm lớn là bạn có thể vượt qua bất kỳ số tham số nào một cách dễ dàng.
Có bất kỳ tác động hiệu suất? –
Câu trả lời hay. Thật vậy, biểu thức lambda tạo ra một đóng (http://en.wikipedia.org/wiki/Closure_(computer_science)) để biến (có thể nhiều hơn một trong trường hợp chung) có thể được tham chiếu ở nơi khác. – Noldorin
@anon: Không, không nên có bất kỳ tác động hiệu suất nào theo như tôi biết. – Noldorin