是否可以在 brightscript 中创建具有相同功能注册 observeField 的多个任务?

Is it possible to create multiple tasks with same function registering for observeField in brightscript?

我们创建了从服务器接收程序信息并处理数据的任务。数据处理完成后,任务将通过设置响应字段进行通知,屏幕将在向 observeField 注册响应时收到通知,如下所示。

屏幕:

m.FetchSchedule = CreateObject("roSGNode", "FetchScheduleData")
m.FetchSchedule.scheduleRequestContent = channels
m.FetchSchedule.observeField("scheduleContent", "didReceiveInitialScheduleData")
m.FetchSchedule.control = "RUN"

屏幕中的观察者函数:

sub didReceiveInitialScheduleData()
        if m.FetchSchedule.scheduleContent <> invalid and m.FetchSchedule.scheduleContent.getChildCount() > 0 and m.FetchSchedule.totalRows > 0
            ? "GuideScreen.brs - [didReceiveInitialScheduleData]"
    end if
end sub

这对单个任务没有任何问题。但是我们需要获取所有类别频道的节目信息。现在我们按顺序执行此操作意味着一旦完成一个类别的任务,我们就会为另一个类别创建另一个任务。 这工作正常,但需要时间,因为我们是按顺序进行的。

为了减少延迟,我们尝试为每个类别创建一个任务并尝试同时 运行。但是想不出怎么修改观察者函数。

在屏幕中创建多个任务的代码:

for x = 0 to m.global.AllNeighborhood.count() - 1
    m.FetchSchedule[x] = CreateObject("roSGNode", "FetchScheduleData")
    m.FetchSchedule[x].scheduleRequestContent = channels
    m.FetchSchedule[x].categoryIndex = x
    m.FetchSchedule[x].observeField("scheduleContent", "didReceiveInitialScheduleData")
    m.FetchSchedule[x].control = "RUN"
end for

我们将线程索引作为 'categoryIndex' 传递。但是无法修改观察者函数"didReceiveInitialScheduleData"。因为我们需要观察者函数的索引来访问响应。即使我们将索引保存为 'categoryIndex',即使要访问它,我们也需要索引。我们被困在这里了。

任何人都可以让我们知道是否可以创建具有相同观察者功能的多个任务。如果可能的话,我们如何知道从哪个线程我们得到了响应。如果不行,有没有办法解决这个问题。

通过在观察者回调函数中指定参数,您可以访问触发事件的节点。

sub didReceiveInitialScheduleData(message as Object)
    task = message.getRoSGNode()
    ? task.scheduleContent 'This will print the respective task's scheduleContent field
    ...
 end sub

这样,无论何时回调函数被调用,您都可以确切地知道是哪个任务触发了它,并且可以轻松访问它的响应。