ما هو إصدار المنتج الذي تستخدمه؟
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
. على أي حال ، أعتقد أنه لا يمكن إعادة إنتاج هذه المشكلة في نموذج التطبيق.
لا توجد أمثلة لأنه لا يدعم حاليًا ، الاسم مضلل قليلاً في هذه الحالة. فقط جانب 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.
});
التعليق الأكثر فائدة
تمت إضافة الدعم في https://github.com/cefsharp/CefSharp/pull/2771 هناك بعض حالات الاختبار
QUnit
، يرجى إرسالPR
مع أي حالات فاشلة تحتاج إلى معالجة .تحتاج إلى تعيين المتابعة قبل إنشاء مثيلات
ChromiumWebBrowser
. إذا حاولت إرجاعTask
بدون تمكين التالي ، فيجب أن تحصل على رسالة خطأ مفصلة.هذه الميزة متاحة فقط عند تسجيل كائن مثل ASYNC ، على سبيل المثال
isAsync: true
ج #
CefSharpSettings.ConcurrentTaskExecution = صحيح ،