3

考虑以下 C# 代码:

async Task DoSomethingAsync()
{
 if (m_f)
   return;
 await DoSomethingInternalAsync();
}

编译器将其转换为一个任务返回调用,如果 m_f 为真,则任务立即完成,否则,它将异步操作“委托”给 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 关键字 - 本质上是创建一个已完成的任务。

4

2 回答 2

10

另一种方法是task_from_result。您可以使用concurrency::task_from_result()fortask<void>方法和concurrency::task_from_result(theReturnValue)fortask<T>方法。我相信这是 Visual Studio 2013 的新起点。

于 2014-02-10T00:36:57.450 回答
2

明白了.. 这将创建一个空任务:

concurrency::create_task([]{});
于 2013-03-19T08:21:43.250 回答