最近在写程序,突然领悟了为什么需要协程锁
bool isRequest;
async void UpdateRank()
{
FrontThree.Clear();
await ComplexQuery(3, FrontThree);
Debug.Log("更新前三名数据");
foreach (var item in RankItems)
{
item.Reset();
}
int index = 0;
foreach (var item in FrontThree)
{
RankItems[index].SetData(item);
index++;
}
}
- 比如这段逻辑,如果同时运行两次
UpdateRank();
UpdateRank();
- 那么就会导致FrontThree都会添加数据,最终count是6
- 所以要加一个判断
if (isRequest) return;
isRequest = true;
..........
isRequest = false;
- 主要是因为协程这种会阻塞程序,导致下面的逻辑被阻塞了。要是同时执行两个相同的协程,他们下面的逻辑都阻塞了,然后又去执行相同逻辑,就会出现问题。