我有一个单元测试,其中我正在编写并多次从cassandra中读取。
future = function(Cassandra update with value x) - async //write and read updated value
value = future.get(); //reading
print value;
assert value == x;
//doing the above operation multiple times with different values of x;
多次运行相同的代码会显示不同的结果,即打印不同的值'值'属性。
我在本地主机上使用cassandra
replication = {
'class': 'SimpleStrategy',
'replication_factor': '1'
};
值得注意的是,我正在写表并在表中的同一行读取(在所有读写中,主键是相同的)。
虽然我多次修改同一个对象,但它们应该按顺序运行,因为我在每个更新语句之后运行阻塞函数future.get()
。
我正在使用Cassandra 2.0.14
datastax
驱动程序和jdk 1.8
。
为什么我必须面对这样的行为呢?
答案 0 :(得分:0)
弄清楚原因。 在我的代码(不是测试代码)中,我实际上并没有按顺序编写和阅读。读取不等待写入完成。
我在做什么:
Dim hh As Variant
Dim hi As Variant
hh = Range("A" & hd)
hi = Range("B" & hd)
If hi = Application.VLookup(hh, Worksheets("Equivalency Table").Range("A1:D20"), 2, False) Then
If Not IsError(hi) Then
Range("A" & hd & ":B" & hd).Select
Selection.Style = "Good"
hf = hf + 1
Else
Range("A" & hd & ":B" & hd).Select
Selection.Style = "Bad"
End If
我应该做什么:
`CompletionStage<Void> Function() {
someOperation
.thenAccept(variable -> AsyncWriteInDb(variable));
}
// AsyncWriteInDb returns CompletionStage<Void> when write is completed.
// I was reading just after execution of this function.
`
如果我编写如下(错误的)代码部分,则更容易理解:
` CompletionStage<Void> Function() {
someOperation
.thenCompose(variable -> AsyncWriteInDb(variable));
}
//AsyncWriteInDb returns CompletionStage<Void> when write is completed.
`