使用している製品のバージョンは何ですか?
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
メソッドを実行すると、何も返されず、promiseは解決されず、オブジェクトは「ロックアップ」して、追加の呼び出しを防ぎます。
このコードは、開発者コンソール内で実行されました。
>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()
以下に追加情報を入力してください。
例外はスローされません。 各関数のブレークポイントがトリガーされます。
General usage
async
メソッドを使用しないことに関する情報はありませんが、そのような場合の例はありません。
この問題は、http://opensource.spotify.com/cefbuilds/index.htmlのCEF
サンプルアプリケーションでも発生しますか?
いいえ、少なくとも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
を返そうとすると、詳細なエラーメッセージが表示されます。
この機能は、オブジェクトを非同期として登録する場合にのみ使用できます(例: isAsync: true
`` `c#
CefSharpSettings.ConcurrentTaskExecution = true;
#### 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
を返そうとすると、詳細なエラーメッセージが表示されます。この機能は、オブジェクトを非同期として登録する場合にのみ使用できます(例:
isAsync: true
`` `c#
CefSharpSettings.ConcurrentTaskExecution = true;