تنفِيذ إطار العمل غير المتزامن

مكتمل

يمكن أن تنتهي مهلة العمليات طويلة الأمد فِي تطبيقات التمويل والعمليات. للتغلب على هذه المشكلة، تتيح المعالجة غير المتزامنة للمستخدمين مواصلة العمل أثناء تشغيل العملية فِي الخلفِية.

على سبيل المثال، قد تحتاج إلى تشغيل المعالجة فِي التطبيق الذي يتعامل مع كمية كبيرة من البيانات أو المعاملات، ولا ترغب فِي مقاطعة عمليات الأعمال اليومية. لذلك، يمكنُك استخدام إطار العمل غير المتزامن لتشغيل هذه العمليات فِي الخلفِية بينما يواصل المستخدمون عملهم دون انقطاع.

لتشغيل عملية بشكل غير متزامن، تحتاج إلى استخدام runAsync الأساليب من الفئات FormRun وGlobal لاستدعاء الطريقة الثابتة التي تريد تشغيلها. إذا تم تشغيل العملية من جانب العميل، فإننا نوصي باستخدام الأسلوب runAsync لفئة FormRun. تحتوي الفئة "Global" على الأسلوب runAsync التي نوصي بها لتشغيل التعليمات البرمجية خارج العميل.

يمكنُك استخدام أسلوب رد الاتصال لعرض رسالة عند اكتمال العملية. طريقة FormRun الفصل runAsync فقط هي التي تعرض الرسالة على الفور. إذا كنت تستخدم طريقة Global الفصل runAsync، فستحتاج إلى تحديث الصفحة.

يجب أن يكون توقيع الطريقة الثابتة:

  • كن ثابتًا.
  • قم بإرجاع حاوية كمعلمة إخراج.
  • لديك حاوية للمعلمات الداخلية. يمكن أن تحتوي الحاوية على المزيد من القيم إذا لزم الأمر.
  • احصل على رمز إلغاء للمعلمات الداخلية.

يوضح المثال التالي طريقة ثابتة يمكنُك استخدامها كـ runAsync :

    /// <summary>
    /// Create entities asynchronously
    /// </summary>
    /// <param name = "_params">Parameters</param>
    /// <param name = "_cancellationToken">CancellationToken object</param>
    /// <returns></returns>
    static container runAsyncJob(container _params, System.Threading.CancellationToken _cancellationToken)
    {
        System.Exception _ex;

        try
        {
            // do something
        }
        catch(_ex)
        {
            throw error("Unsuccessfull");
        }

        return ["Successfull"];
    }

يمكنُك استخدام طريقة ثابتة أخرى للنتيجة، وهي ناجحة أو استثناء، ويجب أن يكون توقيعها:

  • كن ثابتًا.
  • العودة فارغة.
  • احصل على AsyncTaskResult كمعلمة داخلية.

المثال التالي هو طريقة ثابتة للحصول على نتيجة:

    /// <summary>
    /// Async callback
    /// </summary>
    /// <param name = "taskResult">Result of async import or export processing</param>
    static public void processAsyncDataExecutionResult(AsyncTaskResult taskResult)
    {
        container returnValue;
        System.Exception exception;

        if (taskResult != null)
        {
            // Return value from async method
            returnValue = taskResult.getResult();

            // Exception thrown by async method invocation.
            exception = taskResult.getException();

            if (ClrInterop::isNull(exception))
            {
                info(con2Str(returnValue));
            }
            else
            {
                error(exception.Message);
            }
        }
    }

الآن، يمكن لوظيفة runAsync استخدام الطريقتين (يتم تعريف الوظائف التي لا تحتوي على اسم فئة فِي فئة عامة).

    public static void main(Args _args)
    {
        System.Threading.CancellationTokenSource tokenSource = new System.Threading.CancellationTokenSource();
        
        // run job asynchronously
        
        runAsync(classNum(MyASyncClass),
                 staticMethodStr(MyASyncClass, runAsyncJob),
                 conNull(),
                 tokenSource.Token,
                 classNum(MyASyncClass),
                 staticMethodStr(MyASyncClass, processAsyncDataExecutionResult));
    }

يجب أن تحتوي المعلمات التي تستخدمها وظيفة runAsync على المكونات التالية:

  • رقم الفصل الذي سيتم تشغيله.
  • الطريقة الثابتة التي تعمل بشكل غير متزامن.
  • حاوية للمعلمات الداخلية. يتم تعيين القِيمَة من معلمات الحاوية كقائمة معلمات لطريقة التنفِيذ.
  • رمز التراجع. يتم تعيين القِيمَة من معلمة الرمز المميز الاحتياطي كرمز مميز لطريقة التنفِيذ.
  • رقم الفصل لنتيجة الإرجاع.
  • طريقة ثابتة للنتيجة.

لمراجعة مثال للمعلومات السابقة فِي تطبيق قياسي، نوصي بمراجعة وظيفة تحديث قائمة الكيانات فِي تطبيقات التمويل والعمليات ومساحة عمل إدارة البيانات ومعلمات إطار العمل وإعدادات الكيان.