我有一个非常简单的设置,测试rails3 ActiveSupport::Notifications
。 通过阅读文档,ActiveSupport::Notifications.subscribe
位应该异步执行它的操作。显然情况并非如此。ActiveSupport ::通知应该是异步的?
例子:
ActiveSupport::Notifications.subscribe "some.channel" do |name, start, finish, id, payload|
# do expensive task
sleep(10)
end
ActiveSupport::Notifications.instrument "some.channel" #=> will return 10 seconds later
我的印象是,ActiveSupport::Notifications.instrument "some.channel"
将立即返回,让昂贵的任务做昂贵的东西下。否则,我可以直接调用昂贵的任务,而无需使用订阅者。
该文档还指出可能有多个订阅者。在这种情况下,我会被阻止,直到所有其他订户执行他们的代码。
这是正确的吗?如果是的话,有人能解释一下http://api.rubyonrails.org/classes/ActiveSupport/Notifications.html这一行是什么意思?
The block will be called asynchronously whenever someone instruments “render”:
这个railscast可以帮助你更好地理解发生了什么http://railscasts.com/episodes/249-notifications-in-rails-3 – jamesc
我看了好几次。 Ryan在他的用户中没有做耗时的任务,所以他没有机会提及使用'instrument'阻止 – Oktav