3

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

4

2 に答える 2

10

これを行う別の方法は、task_from_resultです。concurrency::task_from_result()fortask<void>メソッドとconcurrency::task_from_result(theReturnValue)forメソッドを使用できますtask<T>。これは、Visual Studio 2013 以降の新しい機能だと思います。

于 2014-02-10T00:36:57.450 に答える
2

わかりました..これにより、空のタスクが作成されます。

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