Cefsharp: طلب الميزة - ربط جافا سكريبت Async إضافة دعم لإرجاع المهمة

تم إنشاؤها على ٦ مايو ٢٠١٩  ·  4تعليقات  ·  مصدر: cefsharp/CefSharp

  • ما هو إصدار المنتج الذي تستخدمه؟
    73.1.130

  • ما هي العمارة x86 أو x64؟
    بنية النظام - x64 ، توجد مشكلة في كلا معماري البرنامج

  • على أي نظام تشغيل؟
    Win10

  • هل تستخدم WinForms أو WPF أو OffScreen ؟
    WPF

  • ما هي الخطوات التي سوف تتكاثر هذه المشكلة؟
    اربط عنصرًا بسيطًا له طريقة async . قم بتشغيل الطريقة من Javascript.
    https://gist.github.com/perf2711/e96e69abad24c254d0192e88eb705709
    لقد قمت باستضافة الملف index.html من خلال python3 -m http.server 8000 .

  • ما هو الناتج المتوقع؟

تعمل الطرق المتزامنة كما ينبغي ، بالإضافة إلى انتظار نتيجة من طريقة غير متزامنة في سياق متزامن. عند تشغيل طريقة async ، لا يتم إرجاع أي شيء ، الوعد لا يحل أبدًا ، والكائن "مغلق" ، مما يمنع أي مكالمات إضافية.

تم تشغيل هذا الرمز داخل وحدة تحكم المطور.

>await TestBoundObject.syncMethod()
"SyncMethod"
>await TestBoundObject.syncMethod1()
"AsyncMethod1"
>await TestBoundObject.syncMethod2()
"AsyncMethod2"
>await TestBoundObject.syncMethod3()
"AsyncMethod3"
>await TestBoundObject.asyncMethod1()
>await TestBoundObject.asyncMethod2()
>await TestBoundObject.asyncMethod3()
>await TestBoundObject.syncMethod()
  • يرجى تقديم أي معلومات إضافية أدناه.
    لم يتم طرح أي استثناءات. يتم تشغيل نقاط التوقف في كل وظيفة.
    لا أرى أي معلومات بخصوص عدم استخدام أساليب async في كائنات منضمة في General usage ، ومع ذلك ، لا توجد أمثلة على مثل هذه الحالة.

  • هل تحدث هذه المشكلة أيضًا في نموذج التطبيق CEF من http://opensource.spotify.com/cefbuilds/index.html؟
    لا ، على الأقل ليس في اختبار Javascript Binding . على أي حال ، أعتقد أنه لا يمكن إعادة إنتاج هذه المشكلة في نموذج التطبيق.

enhancement feature-request pr-merged

التعليق الأكثر فائدة

تمت إضافة الدعم في https://github.com/cefsharp/CefSharp/pull/2771 هناك بعض حالات الاختبار QUnit ، يرجى إرسال PR مع أي حالات فاشلة تحتاج إلى معالجة .

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

هذه الميزة متاحة فقط عند تسجيل كائن مثل ASYNC ، على سبيل المثال isAsync: true

ج #
CefSharpSettings.ConcurrentTaskExecution = صحيح ،

#### Example

```c#
public async Task<string[]> AsyncDownloadFileAndSplitOnNewLines(string url)
{
    var webClient = new WebClient();
    var download = await webClient.DownloadStringTaskAsync(new Uri(url));

    var lines = download.Split('\n').Where(x => !string.IsNullOrEmpty(x.Trim())).ToArray();

    return lines;
}
const url = "https://raw.githubusercontent.com/cefsharp/CefSharp/master/.editorconfig";

boundAsync.asyncDownloadFileAndSplitOnNewLines(url).then(function (lines)
{
    //Do something with the result.
});

ال 4 كومينتر

لا توجد أمثلة لأنه لا يدعم حاليًا ، الاسم مضلل قليلاً في هذه الحالة. فقط جانب JavaScript من المعادلة هو في الواقع غير متزامن. من الصعب تنفيذ هذه الميزة ، فنحن نرحب بك لتقديم طلب سحب.

الطريقة الحالية المدعومة لتنفيذ المهام طويلة الأمد هي استخدام رد اتصال راجع https://github.com/cefsharp/CefSharp/blob/cefsharp/73/CefSharp.Example/JavascriptBinding/BoundObject.cs#L58

ألقينا نظرة سريعة وخطر لي أن ميزة CefSharpSettings.ConcurrentTaskExecution يمكن إعادة كتابتها لدعم هذا دون تغييرات جذرية.

يوجد تنفيذ تقريبي للغاية على https://github.com/amaitland/CefSharp/commit/a9f20aceb7d78b095d542b96c2f7565424bc8c3c

لا مكان بالقرب من الإنتاج جاهز.

حسنًا ، اعتقدت أنه تم دعمه ، وفعلت شيئًا خاطئًا.

ومع ذلك ، فمن الغريب أن يتم قفل كل شيء عند استدعاء طريقة async . ألا يجب أن يكون هناك أي تحذير / استثناء عند حدوثه؟

تمت إضافة الدعم في https://github.com/cefsharp/CefSharp/pull/2771 هناك بعض حالات الاختبار QUnit ، يرجى إرسال PR مع أي حالات فاشلة تحتاج إلى معالجة .

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

هذه الميزة متاحة فقط عند تسجيل كائن مثل ASYNC ، على سبيل المثال isAsync: true

ج #
CefSharpSettings.ConcurrentTaskExecution = صحيح ،

#### Example

```c#
public async Task<string[]> AsyncDownloadFileAndSplitOnNewLines(string url)
{
    var webClient = new WebClient();
    var download = await webClient.DownloadStringTaskAsync(new Uri(url));

    var lines = download.Split('\n').Where(x => !string.IsNullOrEmpty(x.Trim())).ToArray();

    return lines;
}
const url = "https://raw.githubusercontent.com/cefsharp/CefSharp/master/.editorconfig";

boundAsync.asyncDownloadFileAndSplitOnNewLines(url).then(function (lines)
{
    //Do something with the result.
});
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات