ब्लेज़र के लिए नया,

मैं एपीआई के माध्यम से लॉगिन के साथ काम कर रहा हूं, हालांकि मैंने देखा कि यूआई स्वचालित रूप से अपडेट नहीं होता है।

उदाहरण के लिए: जब मैंने पहली बार किसी अमान्य उपयोगकर्ता में लॉग इन किया, तो त्रुटि संदेश प्रदर्शित नहीं होता है, लेकिन दूसरे प्रयास में यह सही ढंग से प्रदर्शित होगा। किसी तरह 1 क्लिक की देरी है।

  private async void DoLogin()
  {
        var result = await API.LoginAsync(username, password);

        if (result.ResultID == 0)
        {

        }
        else
            ErrorMessage = result.ErrorMessage;
  }

रेजर घटक: यहां छवि विवरण दर्ज करें

जब मैंने इसे . में बदल दिया

  private async Task DoLogin()
  {
        var result = await API.LoginAsync(username, password);

        if (result.ResultID == 0)
        {

        }
        else
            ErrorMessage = result.ErrorMessage;
  }

यह अपेक्षा के अनुरूप काम कर रहा है।

क्या कोई प्रकाश डाल सकता है

  • विधि हस्ताक्षर में async शून्य और async कार्य का उपयोग करने में क्या अंतर है?
  • एसिंक शून्य यूआई को तुरंत अपडेट क्यों नहीं करता है?
2
Cris M 3 फरवरी 2021, 12:54

2 जवाब

सबसे बढ़िया उत्तर

[विनम्र] आपको बस एसिंक्रोनस प्रोग्रामिंग के आसपास अपना सिर लाने की जरूरत है। क्या हो रहा है कि यूआई प्रतिपादन आपके एसिंक्रोनस कार्य से पहले पूरा हो गया है। शून्य दिनचर्या DoLogin एपीआई कॉल के पूरा होने की प्रतीक्षा कर रही है, लेकिन कॉल स्टैक के तरीके नहीं हैं, await के लिए कोई कार्य नहीं है। जब API कॉल यील्ड कंट्रोल करता है, तो उसे कॉलिंग स्टैक का बैक अप दिया जाता है। DoLogin विधि में शेष कोड को पूरा करने से पहले कार्य पूरा होने की प्रतीक्षा करता है, लेकिन कॉलिंग विधि के लिए उपज देता है जो तब कॉल को DoLogin पर ले जाता है - आपके मामले में आपका नियंत्रण प्रदान करता है।

async Void Method पैटर्न आग है और भूल जाओ, आपको प्रतीक्षा करने के लिए कोई कार्य संदर्भ नहीं मिलता है। async Task Method का मतलब है कि आप कॉलिंग रूटीन में await Method कर सकते हैं। आप अधिक यहां पढ़ सकते हैं मेरे कोड प्रोजेक्ट लेखों में से एक।

3
MrC aka Shaun Curtis 3 फरवरी 2021, 13:17

विधि हस्ताक्षर में async शून्य और async कार्य का उपयोग करने में क्या अंतर है?

  • एक async Task (और साथ ही केवल Task) वापसी की प्रतीक्षा है, और Blazor इसका उपयोग करेगा।
  • एक async void तरीका आग और भूल जाना है। जहां संभव हो इससे बचना चाहिए।

एसिंक शून्य यूआई को तुरंत अपडेट क्यों नहीं करता है?

क्योंकि यह अन-अवलोकन निष्पादित करता है। इस मामले में यह बटन के बाद समाप्त होने वाले कोड के समानांतर (लेकिन धीमी गति से) चलता है। इसलिए UI को LoginAsync() रिटर्न से पहले अपडेट किया जाता है।

3
Henk Holterman 3 फरवरी 2021, 12:59