3 votes

En VC++ PPL, comment puis-je créer une méthode retournant une tâche qui retourne de manière synchrone?

Considérez le code C# suivant :

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

Ce que le compilateur transforme cela en est un appel retournant une tâche où si m_f est vrai, la tâche se termine immédiatement et sinon, il "délègue" l'opération asynchrone à DoSomethingInternalAsync().

Maintenant, comment puis-je faire cela en C++ ? Le code devrait ressembler à ceci :

task DoSomethingAsync()
{
if (m_f)
   return [[Que dois-je retourner ici pour que la tâche soit complète (.then appelé immédiatement) ?!]];
return DoSomethingInternalAsync();
}

Édition1 : En C#, je peux utiliser une TaskCompletionSource<> pour faire la même chose, mais sans utiliser le mot-clé async - essentiellement créer une Tâche terminée.

10voto

bobbymcr Points 14916

Une autre façon de faire cela est task_from_result. Vous pouvez utiliser concurrency::task_from_result() pour les méthodes task et concurrency::task_from_result(theReturnValue) pour les méthodes task. Je crois que c'est nouveau à partir de Visual Studio 2013.

2voto

Shahar Prish Points 2715

Compris.. Cela créera une tâche vide :

concurrency::create_task([]{});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X