2013-10-29 19 views
12

मैं थ्रेडपूल पर कुछ दोहराव वाले एकल-थ्रेडेड कम्प्यूटेशनल काम करने के लिए await Task.Run(DoWork) का उपयोग करना चाहता हूं। समस्या यह है कि, मुझे DoWork के अंदर एसटीए COM ऑब्जेक्ट्स का उपयोग करने की आवश्यकता है, इसलिए मुझे लगता है कि मैं थ्रेडपूल का उपयोग नहीं कर सकता क्योंकि मैं पूल थ्रेड के अपार्टमेंट स्टेटस को नहीं बदल सकता।Async/await, ThreadPool और SetApartmentState

मैं इस परिदृश्य में अभी भी async/await का उपयोग कैसे कर सकता हूं? एक कस्टम कार्य शेड्यूलर के साथ एसटीए धागे का अपना पूल बनाना अत्यधिक काम की तरह लगता है।

उत्तर

15

स्टीफन टब has already written an StaTaskScheduler; मैं आपको इसका उपयोग करने की सलाह देता हूं।

फिर आप TaskScheduler का उपयोग कर TaskFactory बना सकते हैं। पर TaskFactory प्रकार पर कोई समतुल्य नहीं है लेकिन आप आसानी से एक using StartNew and Unwrap बना सकते हैं।

+0

वही है जो मैं ढूंढ रहा हूं, धन्यवाद! – avo

संबंधित मुद्दे