सक्षम नहीं करने के लिए अद्यतन यूआई के बाद पृष्ठभूमि कार्य पूरा होने में ASP.NET आवेदन

0

सवाल

मैं चल रहा हूँ एक लंबे समय से चल समारोह के रूप में पृष्ठभूमि कार्य में asp.net आवेदन । से पहले काम पूरा होने का मुख्य धागा बाहर निकलता है (मैं यह चाहते हैं कि जिस तरह से केवल के बाद से, अगर मैं का उपयोग करें कीवर्ड का इंतजार और मुख्य सूत्र तक इंतजार पृष्ठभूमि कार्य के पूरा होने पर, मैं प्रॉक्सी त्रुटि संदेश के साथ

प्रॉक्सी त्रुटि
प्रॉक्सी सर्वर कोई अमान्य प्रतिसाद प्राप्त हुआ से एक upstream सर्वर के बाद से पृष्ठभूमि कार्य बहुत लंबा है

लेकिन एक बार के बाद कार्य पूरा न तो मैं कर रहा हूँ करने के लिए पृष्ठ ताज़ा करने के लिए पुनः निर्देशित करके एक ही पृष्ठ या न तो मैं कर रहा हूँ ओवरराइड करने के लिए यूआई । वहाँ किसी भी तरह से अद्यतन यूआई के बाद मुख्य सूत्र पूरा करता है निष्पादन ।

मेरे कोड में इस तरह चला जाता है:

protected void btnImport_Click(object sender, EventArgs e)
{
        var task = ImportThread();

        if (task.IsCompleted)
        {
            DisplaySuccess("Import success");
        }
        else
            DisplayError("Import failed");
}

private async Task<bool> ImportThread()
{
        try
        {
            var success = await Task<bool>.Run(() => new Manager().Import().ConfigureAwait(false);

            if (task.IsCompleted)
            {
                DisplaySuccess("Import success");
            }
            else 
            {
                DisplayError("Import failed");
            }
    
            return true;
}

ऊपर async कार्य इंतजार कर रहा है नीचे विधि है जो वर्तमान में एक और वर्ग है ।

public bool Import()
{
    // some operations here
    return true;
}

के बाद इस विधि का पूर्ण नियंत्रण वापस करने के लिए पीठ ImportThread() लेकिन कोड वहाँ लिखा ओवरराइड करने के लिए यूआई अद्यतन नहीं यूआई । मैं की जरूरत है अद्यतन करने के लिए यूआई की स्थिति के साथ आयात. और यह भी से ImportThread नियंत्रण है नहीं जा रहा करने के लिए वापस बटन पर क्लिक करें घटना की विधि भी है ।

कृपया मेरी मदद के साथ किसी भी तरह से अद्यतन करने के लिए यूआई की स्थिति का आयात.

नोट: मैं उपयोग करने की कोशिश की Redirect.Response में ImportThread() पेज ताज़ा करने के लिए, लेकिन काम नहीं किया है कि

asp.net async-await background-task c#
2021-11-23 19:55:22
2

सबसे अच्छा जवाब

1

आपकी समस्या यह है कि आप काबू करने के लिए और वेब पेज के जीवन चक्र यहाँ.

आप इस मामले में जो वेब पेज पर उपयोगकर्ताओं को डेस्कटॉप:

enter image description here

अब कहने को उपयोगकर्ता एक बटन क्लिक करता है.

आप अब यह है:

 var task = ImportThread();

    if (task.IsCompleted)

ठीक है, तो वेब पृष्ठ है सर्वर पर है । आप कर सकते हैं में डाल दिया है, यहां तक कि async इंतजार कर रहा है जब तक गायों को घर आते हैं, लेकिन आप अभी भी यह है:

enter image description here

तो के रूप में लंबे समय के रूप में अपने कोड चलाता है, या इंतजार कर रहा है, वेब पेज अभी भी अटक सर्वर साइड पर. केवल जब तक कोड से पूरा करती है और रास्ते के पृष्ठ के नीचे की यात्रा करने के लिए ग्राहक की ओर ।

फिर से: अपने कोड के पीछे नहीं कर सकता को रोकने के लिए, और इंतजार नहीं कर सकता के लिए कुछ खत्म करने के लिए, क्योंकि अगर यह होता है, तो पृष्ठ के ऊपर बनी हुई है सर्वर पर जब तक प्रसंस्करण समाप्त हो गया है ।

फिर और केवल तब करता है वेब पेज यात्रा करने के लिए नीचे वापस करने के लिए ग्राहक की ओर । यह तब होता है;

enter image description here

और फिर सर्वर साइड पृष्ठ पर फेंक दिया जाता है स्मृति से बाहर है, और सभी वर्ग चर को नष्ट कर रहे हैं!!! वेब सर्वर है अब इंतज़ार कर रही किसी भी उपयोगकर्ता के लिए पोस्ट करने के लिए वापस एक पृष्ठ के प्रसंस्करण के लिए!!

तो, अगर आप की जरूरत है चलाने के लिए कुछ प्रकार के लंबे समय से चल प्रक्रिया है?

आप कुछ विकल्प है:

पोस्ट, पेज के पीछे कोड चलाता है, कोड के पीछे शुरू होता है एक नया धागा, वेब पेज बनाता है यात्रा वापस करने के लिए ग्राहक की ओर. उस बिंदु पर, आप की जरूरत है एक टाइमर के कुछ प्रकार के वेब विधि कॉल (अजाक्स) के चुनाव के लिए पूछने या सर्वर, तो लंबे समय से चल प्रक्रिया किया जाता है. और के बाद से एक ajax कॉल नहीं करता है के उपयोग किसी भी वेब नियंत्रण उस पृष्ठ पर, या पृष्ठ के वर्ग चर (याद है, के बाद के वेब पेज के नीचे यात्रा वापस करने के लिए ग्राहक पक्ष के वेब पेज नहीं है नहीं मौजूदा वेब सर्वर की ओर स्मृति में, और न ही है किसी भी वर्ग के मौजूदा चर). तो, फिर से, यह काफी ज्यादा मतलब टाइमर के कुछ प्रकार, या के रूप में विख्यात, एक टाइमर + कोड कॉल करने के लिए कुछ ajax विधि है । और है कि लंबे समय से चल रही प्रक्रिया करने के लिए होगा बहुत संभावना सत्र का उपयोग() के बाद से आप की जरूरत नहीं है उपयोग के नियंत्रण, या यहां तक कि ViewState.

और तुम नहीं आवश्यक है का उपयोग करने के लिए एक ajax कॉल. आप इस्तेमाल कर सकते हैं एक सरल जावास्क्रिप्ट ग्राहक पक्ष दिनचर्या के साथ एक टाइमर का कहना है कि एक बटन क्लिक करता है हर 1 या 2 सेकंड, कोड के पीछे चलाता है, और यह तब होता है की स्थिति पाने के लिए है कि लंबे समय से चल प्रक्रिया (फिर से शायद सत्र), और उसके बाद अद्यतन प्रदर्शन. और फिर आप भी शामिल हो सकते हैं कोड टाइमर को रोकने के लिए जब स्थिति बदल गया है करने के लिए "किया" या जो कुछ भी.

तो कोड के पीछे नहीं है, और नहीं होगा "अद्यतन" वेब पेज के लिए कई बार. आप एक दौर यात्रा है, और कोड के पीछे तेजी से चलाना चाहिए, चाहिए समाप्त चल रहा है, और नहीं कर सकते हैं, यहां तक कि एक का उपयोग करें का इंतजार आदेश के बाद से, तो पृष्ठ STLL प्रतीक्षा करें, और अभी भी अटक सर्वर पर है ।

यदि आप चाहते हैं से परे जाने के लिए सरल टाइमर चाल दृष्टिकोण - जो मैं अक्सर उपयोग करें?

तो आप को अपनाने की जरूरत है और शुरू में अपने वेब साइट पर कुछ के लिए डिजाइन के इस प्रकार के मामले में -

शुक्र है, वहाँ है signalR इस उद्देश्य के लिए, और है कि इसमें कोई शक नहीं सबसे अच्छा विकल्प है और दृष्टिकोण के लिए, आप के बाद से इसे बनाया गया है के लिए वास्तव में अपने सवाल और परिदृश्य.

SignalR

https://docs.microsoft.com/en-us/aspnet/signalr/overview/getting-started/introduction-to-signalr#:~:text=What%20is%20SignalR%3F%20ASP.NET%20SignalR%20is%20a%20library,process%20of%20adding%20real-time%20web%20functionality%20to%20applications.

2021-11-23 21:28:35
0

यदि आप चाहते हैं करने के लिए asynchronously सूचित उपयोगकर्ता (के पूरा होने या विफलता के कुछ भी इस तरह के एक कार्य के रूप में), आप का उपयोग कर सकते हैं वेब धक्का अधिसूचना का उपयोग कर (firebase संदेश बादल) या SignalR कुर्सियां. जब आप का उपयोग एक पृष्ठभूमि कार्य आप अपना मुख्य मुद्दा है और दुर्भाग्य से, वहाँ कोई रास्ता नहीं है करने के लिए प्रतिक्रिया करने के लिए संबंधित उपयोगकर्ता के लिए है.

2021-11-23 20:31:11

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में