नहीं, पहचान इन कार्यकर्ता धागे को स्वचालित रूप से प्रचारित नहीं की जाएगी। यदि, वास्तव में, आप जिन घटकों का उपयोग कर रहे हैं वे HttpContext.User
हैं जो आप कर सकते हैं वर्तमान "थ्रेड" वर्तमान में "परिवेश" HttpContext
उदाहरण को अपने "मुख्य" थ्रेड में कैप्चर करें और इसे अपने कार्यकर्ता धागे में प्रचारित करें। इस तरह यह कुछ दिखेगा:
HttpContext currentHttpContext = HttpContext.Current;
myWorkItems.AsParallel().ForAll(wi =>
{
HttpContext.Current = currentHttpContext;
try
{
// anything called from here out will find/use the context of your original ASP.NET thread
}
finally
{
// Disassociate the context from the worker thread so that it is not held on to beyond its official lifetime
HttpContext.Current = null;
}
});
यह काम करता है क्योंकि HttpContext.Current
स्थिर एक धागा के द्वारा समर्थित है, इसलिए हर कार्यकर्ता धागा अपने मुख्य थ्रेड और किसी भी काम उस बिंदु से उस पर किया है कि देखेंगे से उदाहरण आवंटित किया जाएगा वर्तमान उदाहरण के रूप में।
अब, आपको अवगत होना चाहिए कि HttpContext
और इसके संबंधित वर्गों को थ्रेड सुरक्षित होने के लिए डिज़ाइन नहीं किया गया था, इसलिए यह एक हैक है। यदि आप केवल गुणों से पढ़ रहे हैं तो यह वास्तव में एक समस्या नहीं है। यदि आप उन घटकों का उपयोग नहीं कर रहे हैं जो HttpContext.Current
पर भरोसा करते हैं तो यह सेट करने के लिए "क्लीनर" होगा और इसके बजाय केवल कार्यकर्ता में कब्जा currentHttpContext
चर का उपयोग करें।
Principal logicalPrincipal = Thread.CurrentPrincipal;
myWorkItems.AsParallel().ForAll(wi =>
{
Principal originalWorkerThreadPrincipal = Thread.CurrentPrincipal;
Thread.CurrentPrincipal = logicalPrincipal;
try
{
// anything called from here out will find the principal from your original thread
}
finally
{
// Revert to the original identity when work is complete
Thread.CurrentPrincipal = originalWorkerThreadPrincipal;
}
});
स्रोत
2011-12-04 20:38:39
देखें कि बैकिंग फ़ील्ड '[थ्रेडस्टैटिक] है, यदि नहीं, तो आपको ठीक होना चाहिए। – leppie
@joeenzminger यहां एक परीक्षण के लिए http://stackoverflow.com/a/13049286/50776 देखें जो दिखाता है कि PLINQ 'ExecutionContext' (और इसलिए' Thread.CurrentPrincipal') बहता है। – casperOne