Рассмотрим следующий код 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 — по сути, создать завершенную задачу.
Еще один способ сделать это task_from_result. Ты можешь использовать concurrency::task_from_result()
за task<void>
методы и concurrency::task_from_result(theReturnValue)
за task<T>
методы. Я считаю, что это новый запуск в Visual Studio 2013.
Понял .. Это создаст пустое задание:
concurrency::create_task([]{});