|
1
1
您应该能够在不接触C++的情况下编写包装器。看看如何在dart:async中使用Completer类。基本上,您需要创建一个Completer,立即返回Completer.future,然后从现有回调中调用Completer.complete(行)。 回复:更新。你见过这个吗 article ,特别是关于异步扩展的一点?例如,如果C++API是同步的,您可以在单独的线程中运行它,并使用消息传递与它进行通信。这可能是一种实现方法。 |
![]() |
2
1
您遇到的最大问题是SQLite是一个嵌入式数据库;为了处理查询并提供结果 必须 在您的过程中执行计算(和I/O)。此外,为了使其事务处理系统正常工作,它要么需要连接在 thread that created it ,或以串行模式运行(性能命中)。
因为这些都是相当严格的限制,所以除非使用多个线程,否则切换到异步操作模式的计划不太可能顺利。因为使用多个连接会使事情复杂化很多(因为你不能在它们之间共享一些东西,例如
通过管理工作线程和线程间通信,将同步异步耦合放在Dart级别,这样做可能更简单。这将使您避免对C++代码进行重大更改。我不太了解达特,无法在那里提供很多建议。 我自己,我只是坚持同步连接处理,这样我可以让我的应用程序更有效地使用多线程模式。我将在语义方面取得成功,并为每个线程提供自己的连接(可能是延迟分配的),这样总体速度会更好,但我确实来自一个将线程视为相对重量级资源的编程社区,所以请尽可能利用这一点。(重线程可以减少所需锁的数量,但尝试使用轻线程是没有意义的;这与开销管理有关。) |
![]() |
Coding Dog · Python异步函数不工作。继续跑 1 年前 |
![]() |
cyka · 强制JavaScript等待单击(循环) 2 年前 |
![]() |
CodeMonkey · 无法访问React[重复]中的对象值 2 年前 |
![]() |
Tim · 为异步方法返回列表的最佳方式是什么? 2 年前 |
![]() |
dapidmini · 未捕获的承诺嵌套异步函数承诺错误处理 3 年前 |