मैं विधियों के बड़े सेट के लिए पुनर्वितरण को प्रतिबंधित करना चाहता हूं।क्या फ्रेमवर्क ने पुनर्वित्त का पता लगाने के लिए एपीआई समर्पित किया है?
bool _isInMyMethod;
void MyMethod()
{
if (_isInMethod)
throw new ReentrancyException();
_isInMethod = true;
try
{
...do something...
}
finally
{
_isInMethod = false;
}
}
यह हर विधि के लिए यह करने के लिए कठिन है:
एकल विधि के लिएइस कोड काम करता है।
तो मैं का उपयोग किया है StackTrace वर्ग:
public static void ThrowIfReentrant()
{
var stackTrace = new StackTrace(false);
var frames = stackTrace.GetFrames();
var callingMethod = frames[1].GetMethod();
if (frames.Skip(2).Any(frame => EqualityComparer<MethodBase>.Default.Equals(callingMethod,frame.GetMethod())))
throw new ReentrancyException();
}
यह ठीक काम करता है, लेकिन अधिक एक हैक की तरह दिखता है।
क्या .NET Framework में पुनर्वित्त का पता लगाने के लिए विशेष API है?
आप पुनर्वित्त की परवाह क्यों करते हैं? –
कोड लिखें जहां पुनर्वित्त की अपेक्षा की जाती है, तो आप इसे पुन: दर्ज कर सकते हैं। – Jodrell
विरासत कोड। खिड़कियों के बीच हमारे पास कई परस्पर निर्भरताएं हैं। एकल कार्रवाई घटनाओं, अद्यतनों, डीबी अनुरोधों के कई अनावश्यक दोहराव कैस्केड का कारण बन सकती है। और हर किसी के लूप को किसी की आंखों से पहचानना मुश्किल है। –