В 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([]{});
Другие вопросы по тегам