В VC++ PPL как создать метод, возвращающий задачи, который возвращает синхронно?
Рассмотрим следующий код C#:
async Task DoSomethingAsync()
{
if (m_f)
return;
await DoSomethingInternalAsync();
}
Компилятор превращает это в вызов, возвращающий задачу, где, если m_f имеет значение true, задача завершается немедленно, а если нет, он "делегирует" асинхронную операцию DoSomethingInternalAsync().
Теперь, как мне сделать это в C++? Код должен выглядеть примерно так:
task<void> DoSomethingAsync()
{
if (m_f)
return [[What do I return here so the task is complete (.then called immediately)?!]];
return DoSomethingInternalAsync();
}
Edit1: в C# я могу использовать TaskCompletionSource<>, чтобы сделать то же самое, но без использования ключевого слова async - по сути, создать завершенную задачу.
2 ответа
Решение
Еще один способ сделать это - task_from_result. Ты можешь использовать concurrency::task_from_result()
за task<void>
методы и concurrency::task_from_result(theReturnValue)
за task<T>
методы. Я считаю, что это новый запуск в Visual Studio 2013.
Понял.. Это создаст пустое задание:
concurrency::create_task([]{});