0

MS が提供するサンプル Hilo を読んでいます。ImageBrowserViewModel.cpp の下に、理解できないコードがあります。

// Observe the update after waiting the specified amount of time.
create_task([timeToWait]() {
    assert(IsBackgroundThread());
    ::wait(timeToWait);
}).then([weakThis]() {
    assert(IsMainThread());
    auto vm = weakThis.Resolve<ImageBrowserViewModel>();
    if (nullptr != vm)
    {
        vm->ObserveFileChange();
        vm->m_hasFileUpdateTask = false;
    }
}, task_continuation_context::use_current()).then(ObserveException<void>(m_exceptionPolicy));

クエストはアプリの使用であり、特定のコンテキストで正しく呼び出される必要があることを主張しますIsBackgroundThread()IsMainThread()しかし、::wait(timeToWait)関数呼び出しについてはtask_continuation_context、バックグラウンドで実行されることを確認するための定義はありません。どうすれば機能するのでしょうか?? どうもありがとう!

4

1 に答える 1

1

構築されたタスクのデフォルトは (最初のタスクがコード スニペットにあるため) でtask_continuation_context::use_arbitrary()あるため、指定されていなくても、これがそのようになります。タスク継続ラムダは ::wait を呼び出す前にこれをアサートします (UI スレッドで実行しようとすると例外がスローされます)。

于 2013-08-05T18:05:31.033 に答える