0

Читаю образец Хило, представленной МС, при ImageBrowserViewModel.cpp есть некоторый код, я не понимаю:многопоточности в Windows Store приложения

// 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, определенного для того, чтобы убедиться, что он работает в фоновом режиме, мне просто интересно, как это работает? Большое спасибо!

ответ

1

По умолчанию для построенных задач (как первая задача находится в вашем фрагменте кода) является task_continuation_context::use_arbitrary(), поэтому, хотя это не указано, это то, что будет. Продолжение этой задачи лямбда подтверждает это перед вызовом :: wait (что вызовет исключение, если оно попытается запустить в потоке пользовательского интерфейса).

Смежные вопросы