假设一个类是这样安排的:
class A {
func a() {
doStuff()
}
func b() {
Task {
something()
await someLongRunningThing()
somethingElse()
}
}
func c() {
doOtherStuff()
}
}
如何确保一次只有一个函数处于活动状态,并且每个函数的执行都以 FIFO 方式执行?这将包括Task
in的主体b()
。如果Task
正在执行,则该类的其他函数都不能进入,它们将排队并在没有交错的情况下操作 FIFO。
由于成员函数可能会在主线程上被调用,因此不应该涉及线程阻塞。
这是我面临的常见情况,我想不出一个合理的解决方案。一开始我很兴奋actor
,但是当函数中有一个时,actor允许重新进入await
,允许竞争条件。我唯一能找到的就是这里。但是在这里,作者实际上只是将问题进一步推到调用层次结构上。