सी # का उपयोग कर एक सच्ची फ़ंक्शन पाइपलाइन कैसे बनाएं? मैं इस प्रकार है जैसे कुछ विचार आया, लेकिन यह एक सच पाइपलाइनसी # में सही फ़ंक्शन पाइपलाइन को कैसे कार्यान्वित करें?
public static IEnumerable<T> ForEachPipeline<T>(this IEnumerable<T> source, params Func<T, T>[] pipeline)
{
foreach (var element in source) {
yield return ExecutePipeline(element, pipeline);
}
}
private static T ExecutePipeline<T>(T element, IEnumerable<Func<T, T>> jobs)
{
var arg = element;
T result = default(T);
foreach (var job in jobs) {
result = job.Invoke(arg);
arg = result;
}
return result;
}
ऊपर कोड IEnumerable<T>
के प्रत्येक तत्व पाइपलाइन के बाद ही पिछले तत्व सभी कार्यों को क्रियान्वित खत्म में प्राप्त करने में सक्षम हैं में नहीं है (यानी बाहर निकलता है पाइपलाइन), लेकिन परिभाषा के अनुसार element1
func1
निष्पादित करने को समाप्त करता है और func2
निष्पादित करना प्रारंभ करता है, उस समय तक element2
को func1
निष्पादित करना प्रारंभ करना चाहिए और इस प्रकार पाइपलाइन में डेटा का प्रवाह जारी रखना जारी रखना चाहिए।
क्या इस तरह का परिदृश्य सी # में लागू करना संभव है? यदि संभव हो तो कृपया मुझे कुछ उदाहरण कोड दें।
धागे को पेश किए जाने तक केवल एक ही निष्पादन संदर्भ होता है (एकल-धागे के साथ वैकल्पिक दृष्टिकोण केवल प्रत्येक चरण में गैर आलसी परिणाम निर्माण होता है)। धागे के साथ, प्रत्येक चरण केवल एक "पंप" के आसपास संदेशों को पास करने वाली फीफो कतार है। धागे (वास्तव में, समरूपता) जटिलता में भी काफी वृद्धि करते हैं, शायद .NET4 "समांतर" विधियों को देखते हैं। –
मुझे धागे को पेश करने में कोई समस्या नहीं है, मुझे वैसे भी काम करने की ज़रूरत है .. कृपया कुछ विचार साझा करें –
क्या PLINQ पहले से ही हल नहीं करेगा? http://msdn.microsoft.com/en-us/library/dd460688.aspx – bzlm