我对以下代码中邮件到达的邮件序列感到困惑:
class Product(models.Model):
category = models.ForeignKey(Category,related_name='products')
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True)
image = models.ImageField(upload_to='products/%Y/%m/%d', blank=True)
description = models.TextField(blank=True)
price = models.DecimalField(max_digits=10, decimal_places=2)
stock = models.PositiveIntegerField()
available = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
ordering = ('name',)
index_together = (('id', 'slug'),)
def __str__(self):
return self.name
}
在驱动程序中,我向演员发送消息
class myAct extends Actor {
def receive = {
case 1 =>
println(1)
case 2 =>
sender ! 90
case 3 =>
println(3)
}
问题是邮件将以何种顺序传递到邮箱。 1总是先到达。 3将永远到达最后。是否有可能在1之前到达。
答案 0 :(得分:0)
Message Ordering上有一个特定的文档部分。如果你的"驱动程序"是另一个演员然后顺序是明确的。来自文档:
规则更具体地说是对于一对特定的演员, 直接从第一个发送到第二个的消息不会 收到乱序。这个词直接强调了这一点 保证仅适用于使用tell运算符发送给 最终目的地,而不是在使用调解员或其他信息时 传播特征(除非另有说明)。
如果驱动程序不在Actor内,则default implicit sender为Actor.noSender
。 Per Konrad的评论似乎在这种情况下仍然保留了排序。