小编the*_*Man的帖子

使用AsObservable观察TPL数据流块而不消耗消息

我有一连串的TPL Dataflow块,并希望观察系统内部的进度。

我知道我可以将a TransformBlock塞入要观察的网格中,将其发布到各种进度更新器中,然后将消息原封不动地返回到下一个块。我不喜欢这种解决方案,因为该块纯粹是因为它的副作用而存在,而且我还必须在我想观察的任何地方更改块链接逻辑。

因此,我想知道是否可以ISourceBlock<T>.AsObservable用来观察网格内消息的传递而无需更改它,也无需消耗消息。如果可行的话,这似乎是一种更纯净,更实用的解决方案。

从我对Rx的(有限的)理解中,这意味着我需要可观察的对象是热的而不是冷的,以便我的progress更新程序可以看到该消息但不使用它。并且.Publish().RefCount()似乎是使可观察到的热点的方法。但是,它根本不起作用按预期-而不是要么block2progress接收并消耗每条消息。

// Set up mesh
var block1 = new TransformBlock<int, int>(i => i + 20, new ExecutionDataflowBlockOptions() { BoundedCapacity = 1 });
var block2 = new ActionBlock<int>(i => Debug.Print("block2:" + i.ToString()), new ExecutionDataflowBlockOptions() { BoundedCapacity = 1 }); 
var obs = block1.AsObservable().Publish().RefCount(); // Declare this here just in case it makes a difference to do it before the LinkTo call. …
Run Code Online (Sandbox Code Playgroud)

.net c# system.reactive tpl-dataflow rx.net

5
推荐指数
2
解决办法
808
查看次数

如何在不遇到SecurityException的情况下从Scala脚本引用java.sql?

从Java 9开始,直接从scala脚本使用时,从Scala中调用java.sql中定义的对象会抛出java.lang.SecurityException.

Java Version: 10.0.1
Scala Version: 2.12.4
sbt Version: 1.2.0
Run Code Online (Sandbox Code Playgroud)

下面的屏幕截图是一个完整的最小工作示例,其中包含适用于工作和非工作版本的控制台输出.具体来说:将脚本代码复制到类中,并从该类运行它,可以解决问题.有没有办法编写直接使用对象的Scala脚本java.sql

build.sbt

name := "mypackage"
version := "0.1"
scalaVersion := "2.12.4"

libraryDependencies += "org.postgresql" % "postgresql" % "42.2.4"
Run Code Online (Sandbox Code Playgroud)

broken-script.scala

import java.sql.{Connection, DriverManager}
import java.util.Properties

object Main {

  private def url = "jdbc:postgresql://localhost:5432/postgres"

  val credentials: Properties ={
    val properties = new Properties()
    properties.setProperty("user", "integration_test")
    properties.setProperty("password", "integration-pass")

    properties
  }

  def connect(): Connection =
    DriverManager.getConnection(url, credentials)


  def run(): Unit = {
    connect()
  }

}

Main.run()
Run Code Online (Sandbox Code Playgroud)

如下面的控制台输出所示,broken-script.scala遇到SecurityException.

brokenScript.scala Output …

java scala jdbc sbt java-9

5
推荐指数
1
解决办法
196
查看次数

标签 统计

.net ×1

c# ×1

java ×1

java-9 ×1

jdbc ×1

rx.net ×1

sbt ×1

scala ×1

system.reactive ×1

tpl-dataflow ×1