Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 服务结构锁定和超时_Multithreading_Azure Service Fabric_Service Fabric Stateful - Fatal编程技术网

Multithreading 服务结构锁定和超时

Multithreading 服务结构锁定和超时,multithreading,azure-service-fabric,service-fabric-stateful,Multithreading,Azure Service Fabric,Service Fabric Stateful,我正在处理多个线程访问此方法的情况 using (var tx = StateManager.CreateTransaction()) { var item = await reliableDictioanary.GetAsync(tx, key); ... // Do work on a copy of item await reliableDictioanary.SetAsync(tx, key, item); await tx.CommitAsync(); } 单线程这很

我正在处理多个线程访问此方法的情况

using (var tx = StateManager.CreateTransaction())
{
  var item = await reliableDictioanary.GetAsync(tx, key);
  ... // Do work on a copy of item
  await reliableDictioanary.SetAsync(tx, key, item);
  await tx.CommitAsync();
}
单线程这很好,但是当我尝试使用多线程以这种方式访问字典时,我遇到了一个
System.TimeOutException

我能够绕过它的唯一方法是在
GetAsync(…)
方法上使用
LockMode.Update
。这里有人经历过这样的事情吗

我想知道是否有一种方法可以使用快照隔离进行读取,这将允许在读取时不加锁,而不是在记录上使用共享锁


我已经尝试使用上面所示的共享事务以及get和set的单个事务来实现这一点。任何帮助都将不胜感激

读取时的默认锁是共享锁。(由
GetAsync
引起) 如果你想写,你需要一个独占锁。如果存在共享锁,则无法获取它

正如您所注意到的,将第一个锁作为更新锁可以防止出现这种情况

在枚举记录时会发生快照隔离,而不是使用
GetAsync

更多信息