0
假設我有一個簡單的對象併發更改在異步MongoDB中(C#)
現在,我有兩個異步更新操作定義爲例如:
void UpdateV1(int id, int V)
{
var F = Builders<A>.Filter.Eq(_ => _._id, Id);
var U = Builders<A>.Update.Set(_ => _.V1, V);
Mongo.Driver.UpdateOneAsync(F, U);
}
void UpdateV2(int id, int V)
{
var F = Builders<A>.Filter.Eq(_ => _._id, Id);
var U = Builders<A>.Update.Set(_ => _.V2, V);
Mongo.Driver.UpdateOneAsync(F, U);
}
如果我運行下面的命令:
UpdateV1(1, 10);
和
UpdateV2(1, 20);
在不同的線程
,但大致在同一時間,發生了什麼?
我能得到:
- 的記錄只在V1和V2有什麼改變?
- V1和V2都發生了變化的記錄?
我問這個問題的原因是我們有一個非常奇怪的錯誤,它看起來像第一個選項是發生了什麼,但預期的結果顯然是最後一個。
這些問題在我們阻止呼叫時開始消失,但也可能是一種副作用。
這是使用C#驅動程序,所有最新版本。
會像collection.UpdateOneAsync(F,U).Result正常工作,然後它會強制操作完成?基本上使其成爲同步操作? – Thomas