Bin*_*ier 5 c# session transactions async-await mongodb-.net-driver
从文档读取隔离一致性 - 会话(强调我的)
为了提供因果一致性,MongoDB 3.6 在客户端会话中启用了因果一致性。因果一致会话表示相关的读取和确认写入操作序列具有因果关系,该因果关系由它们的顺序反映出来。应用程序必须确保一次只有一个线程在客户端会话中执行这些操作。
来自文档交易 - 交易和会话
事务与会话相关联。也就是说,您为会话启动事务。在任何给定时间,一个会话最多可以有一个打开的事务。
这是否说使用 async/await 是不安全的,或者至少所有使用会话和事务的任务都应该 - 不知何故 - 在同一线程上执行?
还是说会话上的每个异步操作都需要完成才能启动另一个?
还是说可以针对会话运行多个异步操作,但所有这些操作必须在同一线程上运行。
tl;dr
对事务使用 async/await 是否安全?如果没有,这里的最佳做法是什么?
例如,这是(公认的可怕代码)好吗?
[HttpPost]
public async Task<IActionResult> PostAsync(CreateRequest createRequest)
{
using (var session = await _client.StartSessionAsync())
{
await session.StartTransactionAsync();
var inserts = new Task[] {
_colHomer.InsertOneAsync(session, createRequest.Homer),
_colMarge.InsertOneAsync(session, createRequest.Marge),
_colBart.InsertOneAsync(session, createRequest.Bart)
};
await Task.WhenAll(inserts);
await session.CommitTransactionAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1232 次 |
| 最近记录: |