नीचे दिए गए कोड के दो टुकड़ों के बीच क्या अंतर है? क्या दूसरे का उपयोग करने में कोई समस्या होगी?थ्रेडिंग और लैम्ब्डा एक्सप्रेशन
परिदृश्य 1:
private void Log(Exception e)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(Log), e);
}
private void Log(object obj)
{
Exception e = (Exception)obj;
Logger.Log(e);
}
परिदृश्य 2
private void Log(Exception e)
{
ThreadPool.QueueUserWorkItem(
(obj) =>
{
Logger.Log(e);
});
}
परिदृश्य 2 में, मैं ThreadPool करने के लिए एक पैरामीटर के रूप में में अपवाद गुजर नहीं कर रहा हूँ। अपवाद वस्तु का धागा marshalling कैसे होता है? क्या कोई समस्या होगी? अगर ऐसा करने की सीमाएं क्या हैं? बड़ा फायदा यह है कि आप किसी भी पैरामीटर में आसानी से पास कर सकते हैं।
वहाँ किसी भी प्रदर्शन निहितार्थ हैं? –
अच्छा जवाब। दरअसल, लैम्ब्डा अभिव्यक्ति एक बंद (http://en.wikipedia.org/wiki/Closure_(computer_science) उत्पन्न करती है) ताकि चर (सामान्य मामले में एक से अधिक हो) को कहीं और संदर्भित किया जा सके। – Noldorin
@anon: नहीं, जहां तक मुझे पता है वहां कोई प्रदर्शन प्रभाव नहीं होना चाहिए। – Noldorin