मैं NLog 4.3.5 और नेट ढांचा 4.6.1NLog MappedDiagnosticsLogicalContext async में काम नहीं कर/ConfigureAwait (गलत) के साथ इंतजार है
उपयोग कर रहा हूँ जब मैं एक सर्वर साइड आपरेशन मैं फोन शुरू:
NLog.MappedDiagnosticsLogicalContext.Set("OperationId", Guid.NewGuid());
यह मैप हो जाता है और मेरी लॉग फ़ाइलों में प्रकट होता है। सब अच्छा है .... या यह है? मेरी लॉग फ़ाइलों की समीक्षा करते समय, मैंने देखा कि यह ऑपरेशन आईडी मान काम नहीं कर रहा है जैसा कि मैंने उम्मीद की थी।
उदाहरण:
धागा 19 में एक ऑपरेशन शुरू होता है और संदर्भ सेट।
यह सब का इंतजार कॉल
यह प्रदर्शन एक
var tasks = items.Select(item => Task.Run(() => { /* do stuff */} await Task.WhenAll(tasks).ConfigureAwait(false)
- धागे इन कार्यों के लिए इस्तेमाल में से एक धागा 31 है पर .ConfigureAwait (गलत) का उपयोग करता है (ध्यान रखें कि बाद के लिए)
- इस बीच, थ्रेड 36 में, एक अलग सर्वर विधि को बुलाया जाता है और एक नया ऑपरेशन शुरू होता है। कई लॉग संदेशों इसके साथ लिखा जाता है अद्वितीय आपरेशन आईडी
- इस आपरेशन ConfigureAwait (गलत)
- अगले लॉग बयान धागा 31. पर होता है तब से, यह आपरेशन आईडी उस के लिए बनाया गया था लॉग के साथ 2 अलग इंतजार कॉल करता है ऑपरेशन जो थ्रेड 1 9 पर शुरू हुआ!
मुझे ऐसा होने की उम्मीद नहीं थी और यह कैसे हुआ यह अनिश्चित है। लेकिन, जैसा कि मैंने अपने लॉग इतिहास को देखा है, मैं देखता हूं कि इस तरह की चीज पहले हुई है।
मैंने सोचा कि तार्किक कॉल संदर्भ को संभालना था। क्या यह मेरा उपयोग कॉन्फ़िगरएवाइट (झूठा) है जो इस व्यवहार का कारण बन रहा है? यही एकमात्र चीज है जिसके बारे में मैं सोच सकता हूं ....
हाँ, कि समाधान लिंक मैंने ऊपर पोस्ट में था। – Keith
यह आंशिक रूप से लिंक से है। मैंने आपकी आवश्यकताओं के लिए अद्यतन और विस्तार किया है। – Julian