次の 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 キーワードを使用せずに、基本的に完了したタスクを作成します。