यहां मेरे लिए अपेक्षाकृत सामान्य कार्य है, और, मुझे लगता है कि, कई .NET प्रोग्रामर के लिए:
मैं किसी दिए गए प्रकार को संसाधित करने की आवश्यकता वाले वर्कर थ्रेड को शेड्यूल करने के लिए .NET थ्रेडपूल का उपयोग करना चाहता हूं कार्य।जेनेटिक थ्रेडपूल .NET
एक पुनश्चर्या के रूप में, ThreadPool और उसके संबंधित प्रतिनिधि की कतार विधि के लिए हस्ताक्षर कर रहे हैं:
public class Worker<T> {
public void schedule(T i_task) {
ThreadPool.QueueUserWorkItem(execute, i_task)
}
private void execute(Object o){
T task = (T)o; //What happened to the type safety?
executeTask(task);
}
private void executeTask(T i_task){
//process i_task
}
}
:
public static bool QueueUserWorkItem (
WaitCallback callBack,
Object state
)
public delegate void WaitCallback (Object state)
इसलिए, एक ठेठ सामान्य कार्यकर्ता धागा वर्ग कुछ ऐसा दिखाई देगा state
पैरामीटर के प्रकार पर ध्यान दें? यह Object
है!
एनईटी टीम ने QueueUserWorkItem
विधि (या पूरे ThreadPool
कक्षा) सामान्य बनाने के लिए क्यों चुना है? मुझे विश्वास नहीं है कि उन्होंने इसे अनदेखा किया है।
यहां बताया गया है कि मैं इसे देखना चाहते हैं:
//in the ThreadPool class:
public static bool QueueUserWorkItem<T> (
WaitCallback<T> callBack,
T state
)
public delegate void WaitCallback<T> (T state)
इस कार्यकर्ता वर्ग प्रकार सुरक्षित (और एक बहुत साफ, IMHO) बनाना होगा:
public class Worker<T> {
public void schedule(T i_task) {
ThreadPool.QueueUserWorkItem<T>(execute, i_task)
}
private void execute(T i_task){
//process i_task
}
}
मुझे याद आ जाना चाहिए कुछ कुछ।
मैं निष्पादन 'अंतर्निहित एक काम कतार के परत के रूप में एक धागा पूल का उपयोग नहीं कर के अपने तर्क समझ में नहीं आता तोड़ने के लिए नहीं चुना है। * * * का उपयोग करते समय यह एक समस्या है।नेट थ्रेडपूल क्लास सीमित संख्या में थ्रेड के कारण? आईएमओ काम करना कतार में कार्यों को मानना स्वाभाविक है। क्या आप विस्तार से बता सकते हैं? –