重要的抽象和数据结构
TaskRunner和SequencedTaskRunner和SingleThreadTaskRunner
用于发布由TaskRunner运行的base :: Callbacks“任务”的接口。TaskRunner不保证执行(顺序,并发性,甚至根本不执行)。SequencedTaskRunner提供有关执行顺序的某些保证(大致来说是FIFO,但如果感兴趣,请参见标头中的详细内容),并且SingleThreadTaskRunner提供与SequencedTaskRunner相同的保证,除了所有任务都在同一线程上运行。MessageLoopProxy是SingleThreadTaskRunner的规范示例。这些接口对于通过依赖项注入进行测试也很有用。 注意: 成功发布到TaskRunner并不一定意味着该任务将运行。
注意: TaskRunner的一个非常有用的成员函数是PostTaskAndReply(),该函数会将任务发布到目标TaskRunner,并在完成时将“答复”任务发布到原始TaskRunner。
MessageLoop 和 MessageLoopProxy 和BrowserThread 和RunLoop
这些是用于发布任务的各种API。MessageLoop是MessageLoopProxy(在Chromium代码中使用最广泛的任务运行程序)使用的具体对象。您几乎应该总是使用MessageLoopProxy而不是MessageLoop,或者如果您使用的是chrome或content,则可以使用BrowserThread。这是为了避免在破坏MessageLoop方面发生争执,因为如果基础MessageLoop已被破