【发布时间】:2022-12-10 12:00:15
【问题描述】:
我的工作流程中有一个切片,需要等到我在同一信号通道上收到切片中每个元素的信号。我尝试使用以下代码,但它似乎没有等待收到的所有消息。
selector := workflow.NewSelector(ctx)
notificationSignalChan := workflow.GetSignalChannel(ctx, "my-channel")
for i := 0; i < len(container.Items); i++ {
if container.Items[i].Status != status.Pending {
continue
}
var expectedNotification events.Notification
selector.AddReceive(notificationSignalChan, func(c workflow.ReceiveChannel, more bool) {
// So it has to be explicitly consumed here
c.Receive(ctx, &expectedNotification)
idx := slices.IndexFunc(container.Items, func(item *model.Item) bool {
return item.ID == notification.ItemID
})
recordedAt := workflow.Now(ctx)
container.Items[idx].Status = status.Processed
err = workflow.ExecuteActivity(ctx, activities.OnProcessed, container.Items[idx]).Get(ctx, nil)
if err != nil {
panic(err)
}
})
}
for i := 0; i < len(container.Items); i++ {
if container.Items[i].Status != status.Pending {
continue
}
selector.Select(ctx)
}
【问题讨论】: