पर कक्षा के तरीकों को सशर्त रूप से चलाएं मेरे पास एक कक्षा है जो डेटाबेस में लॉगिंग जानकारी सहेजती है (NServiceBus संदेश Handle
विधि में)।एक अलग थ्रेड
मुख्य प्रक्रिया से लॉगिंग को अलग थ्रेड (और लेनदेन) पर किया जा सकता है। लेकिन यह सब एक ही पृष्ठभूमि धागे पर किया जाना चाहिए (जिसका अर्थ है कि उन्हें क्रम में किया जाना चाहिए, केवल मुख्य प्रक्रिया के साथ सिंक में नहीं)।
हालांकि, एक बार जब यह NServiceBus से वास्तविक डेटा की विदेशी कुंजीिंग शुरू करता है, तो उसे एक ही थ्रेड पर होना आवश्यक है। अगर वहाँ मेरे लेनदेन सशर्त उपयोग करने के लिए भी सशर्त एक अलग धागा करने के लिए चल रहा है स्थानांतरित करने के लिए एक रास्ता है
public class MyExample
{
public void LogSomeStuff(Stuff stuff)
{
using (MoveOutsideTransaction())
{
// Do Method Stuff here
dataAccess.SaveChanges();
}
}
public void LogSomeOtherStuff(Stuff stuff)
{
using (MoveOutsideTransaction())
{
// Do Other Method Stuff here
dataAccess.SaveChanges();
}
}
private IDisposable MoveOutsideTransaction()
{
if (loggingOutsideTransaction)
return new TransactionScope(TransactionScopeOption.Suppress);
return null;
}
}
मैं सोच रहा हूँ:
यहाँ कुछ उदाहरण कोड है। (लेकिन केवल जब यह लेन-देन को रोकता है।)
यह बहुत अच्छा लग रहा है, लेकिन मेरे कई तरीकों में कई पैरामीटर हैं। अधिकांश 'स्ट्रिंग' और 'int' हैं लेकिन मुझे उन्हें पास करने की आवश्यकता है। क्या इस सेटअप के साथ ऐसा करने का कोई तरीका है? (ऐसा लगता है कि यह विधि को कॉल करता है, लेकिन प्रत्येक कॉल के साथ पैरामीटर की अनुमति नहीं देता है।) – Vaccano
@Vaccano: आप इसके बजाय 'एक्शन' का उपयोग कर सकते हैं। या जब लैम्ब्डा अभिव्यक्ति के माध्यम से 'एक्शन' प्रतिनिधि का निर्माण करते हैं तो आप चर पर बंद कर सकते हैं। –