【问题标题】:Intergrating both synchronous and asynchronous libraries集成同步和异步库
【发布时间】:2015-03-09 23:33:58
【问题描述】:

是否可以将同步和异步函数集成到一个调用/接口中,同时保持静态类型?如果可能的话,它能否与继承保持中立,即不将同步方法包装在异步中,反之亦然(尽管这可能是最好的方式)。

我一直在阅读,发现通常建议将它们分开(http://www.tagwith.com/question_61011_pattern-for-writing-synchronous-and-asynchronous-methods-in-libraries-and-keepinMaintain both synchronous and asynchronous implementations)。但是,我想这样做的原因是我正在为 Dart 语言创建一个行为树框架,并且发现很难将同步和异步“节点”混合在一起进行迭代。似乎这些可能需要保持分开,这意味着适合同步方法的节点必须是异步的,或者相反,如果它们要位于同一“树”内。

我正在寻找专门针对 Dart lang 的解决方案,尽管我知道这完全属于一般编程概念的范畴。我对这无法实现但值得一试持开放态度。

感谢您的阅读。

【问题讨论】:

  • 读得很好!非常有意思。所以基本上你的意思是,不要使用 Dart,而是使用 Go? ;) 你认为同步功能会消失吗?
  • 一旦在 Dart 中添加了某种“阻塞”功能(参见 fetch),这将有助于打破同步和异步之间的区别。是的,Go 在这方面更加成熟。我期待看到 fletch 的发展历程。

标签: asynchronous dart synchronous typed


【解决方案1】:

您当然可以同时使用同步和异步功能。您不能做的是在调用异步函数后返回同步执行。

在我看来,同时维护同步和异步方法主要是浪费时间。有时同步版本很方便,不必为一些简单的操作调用异步调用,但总的来说,Dart 异步是 Dart 不可或缺的一部分。如果你想使用 Dart,你必须习惯它。 使用新的 async/await 功能,您可以编写使用异步函数的代码,几乎与仅使用同步函数时相同。

【讨论】:

  • 你必须习惯它,或者等待 fetch ;)
  • 好的,谢谢。因此,Dart-y 的做法是支持 async 作为基类,并(如果需要)将同步方法包装在异步方法中(纯粹是为了在等待调用之前节省一些代码时间,否则我必须单独做竞争者在每个节点)。谢谢。弗莱奇呢?
  • 我不确定我理解你的意思。只有函数是异步的而不是类。在 Dart 标准库中,一些函数/方法作为异步和附加同步变量 File.exists()File.existsSync() 提供。调用者决定他想要使用什么。无论如何,您需要什么异步?只要您不使用文件或网络访问等操作系统调用或其他一些事件驱动模型,您可能根本不需要使用异步。
  • 简而言之,fletch 是一个使用新的并发原语构建实验性 Dart VM 的项目。这将允许您以与 Go 中使用 goroutine 和通道类似(但不相同)的方式编写代码。 github.com/dart-lang/fletch/wiki/Coroutines-and-Threads
  • 是的,我知道不能上课。为了遵循 Dart 设计模式,我想要在库中同时选择同步和异步函数。我考虑拥有一个带有 Future process() 和 bool processSync() 的 Node 类,但是行为树中的选择器和排序器需要为每个节点调用相同的函数(实现相同的接口),从而导致单独的类 &关于初始化的一些花哨的思考,以区分同步和未来返回的节点。异步支持是必须的库(即使是我自己的使用。我想将它用作服务器端框架的基础)。
猜你喜欢
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
  • 2011-10-31
  • 2014-02-09
相关资源
最近更新 更多