मेरे पास कुछ उपयोगिता क्रियाएं हैं जो return Content("my text","text/plain")
के माध्यम से टेक्स्ट आउटपुट लौटाती हैं।लंबे समय से चलने वाली कार्रवाई के लिए स्ट्रीमिंग टेक्स्ट आउटपुट?
कभी-कभी इन विधियों को चलाने के लिए कुछ मिनट लगते हैं (यानी लॉग पार्सिंग, डेटाबेस रखरखाव)।
मैं अपनी क्रिया विधि को संशोधित करना चाहता हूं ताकि सभी आउटपुट को एक बार में लौटने की बजाय, टेक्स्ट तैयार होने पर क्लाइंट को स्ट्रीम किया जा सके।
यहाँ एक काल्पनिक उदाहरण है:
public ActionResult SlowText()
{
var sb = new System.Text.StringBuilder();
sb.AppendLine("This happens quickly...");
sb.AppendLine("Starting a slow 10 second process...");
System.Threading.Thread.Sleep(10000);
sb.AppendLine("All done with 10 second process!");
return Content(sb.ToString(), "text/plain");
}
लिखा है, इस कार्रवाई 10 सेकंड के बाद पाठ की तीन लाइनों वापस आ जाएगी। मैं चाहता हूं कि प्रतिक्रिया स्ट्रीम को खोलने का एक तरीका है, और पहले दो पंक्तियों को तुरंत वापस कर दें, और फिर 10 सेकंड के बाद तीसरी पंक्ति।
मुझे यह 10+ साल पहले प्रतिक्रिया ऑब्जेक्ट का उपयोग कर क्लासिक एएसपी 3.0 में करना याद है। क्या यह पूरा करने के लिए कोई आधिकारिक, एमवीसी-अनुकूल तरीका है?
-
अद्यतन: अनुप्रयोग में उस्तरा .cshtml उपयोग करते हुए; लेकिन इन कार्यों के लिए किसी भी विचार (केवल ContentResult
) का उपयोग नहीं कर रहा है।
रेज़र या एएसपीएक्स? अंतर यह है कि रेजर इंजन आउटपुट स्ट्रीमिंग की अनुमति नहीं देता है। – Buildstarted
हम एक ही समस्या में भागते हैं और हम सीधे नियंत्रक में Response.OutputStream का भी उपयोग करते हैं। मुझे यह जानकर उत्सुकता है कि क्या आपको कोई समाधान मिल रहा है? –