似乎如果给定线程由于任何原因失败,这将导致无限循环。
这是不是我写的代码,所以我什至无法编辑它,但我认为这里最明显的问题是计数器变量totalActions
没有标记为易失性,因此线程没有看到最多最新的价值。
所以看起来如果它永远不会得到 的真正价值totalActions
,它会一直等待吗?
这会导致线程递归运行吗?在调试时,我注意到执行线程失败(抛出异常),并且它只是不断地被一遍又一遍地调用......
public void PerformActions(List<Action> actions)
{
object actionLock = new object();
int totalActions = actionts.Count;
for(int x = 0; x < accounts.Count; x++)
{
int y = x;
new Thread(delegate()
{
actions[y].Invoke();
if(Interlocked.Decrement(ref totalActions) == 0)
{
lock(actionLock)
{
Monitor.Pulse(actionLock);
}
}
}).Start();
}
lock(actionLock)
{
if(totalActions > 0)
{
Monitor.Wait(actionLock);
}
}
}
更新
myService
用法是这样的,其中httpRequest
调用从 API 服务获取 json 请求。
Execute.InParallel(
new Action[]
{
() => { abc = myService.DoSomething(); },
() => { def = myService.DoSomethingElse(); }
});