cette question combine deux sujets que je ne comprends pas complètement em> p>
lire via un PAPIER À propos de ASYNC dans F #, je suis tombé sur le thème des agents / boîtes aux lettresProcesseurs, qui peuvent être utilisés pour mettre en œuvre des machines à états réactifs. La nouvelle fonctionnalité Async / attendre le C # 5 pourrait-elle être utilisée pour mettre en œuvre quelque chose de similaire dans C # ou existe-t-il déjà quelque chose d'analogue qui serait mieux adapté? P>
3 Réponses :
En principe, je m'attends à ce qu'il soit simple de traduire ces API F # en c # -plus-async-attendre. P>
En pratique, je ne suis pas clair si cela sortirait de beaux annotations de type extra et pleines d'annotations supplémentaires, ou simplement non-idiomatique et ayant besoin d'un massage de l'API pour le faire sentir plus à la maison en C #. Je pense que le jury est sorti jusqu'à ce que quelqu'un fasse le travail et l'essaie. (Je suppose qu'il n'y a pas de tel échantillon dans l'attente CTP.) P>
Téléchargé le CTP. Maintenant, je vais procéder à élargir mon ignorance en essayant :)
Je vois que votre super échappée l'a fait dans les échantillons, félicitations :)
Aie! Trop difficile pour moi ce genre de choses :(
Avec un peu de piratage assez horrible, vous pouvez utiliser le type Techniquement, la plus grande différence est que f # ASYNC est désactivé pendant que c # async crée une tâche qui fonctionne déjà. Cela signifie que pour construire F # ASYNC de C #, vous devez écrire une méthode qui prend anwyay, si vous voulez Pour expérimenter, voici un certain code que vous pouvez utiliser: p> comme vous pouvez le voir, cela a l'air vraiment horrible :-). p> En principe, il pourrait être possible d'écrire une enveloppe conviviale C # pour le type code> MailboxProcessor code> (extraire simplement les bits laids de ce code), mais il y a quelques problèmes. P. > li>
en F # Vous utilisez souvent des asynchronis à la queue pour mettre en œuvre la machine à états dans le processeur de la boîte aux lettres. Si vous écrivez la même chose en C #, vous obtiendrez éventuellement Il est parfaitement possible d'écrire l'agent en F # et de l'appeler de C #. Ceci est juste une question d'exposition de l'interface c #ielle de F # (à l'aide de la méthode code> async.startastask code>). p> li>
ul> p> MailboxProcessor code> de C # en utilisant
async code>. Certaines difficultés sont que le type utilise certaines fonctionnalités spécifiques F # (les arguments facultatifs sont des options, les fonctions sont des fonctions
FSHARPFUNCUNC CODE> TYPE, etc.)
TR /> Tâche
async
Stackoverflow CODE>, vous devez donc écrire des boucles avec un état mutable. P> Li>
Ouch, mes yeux :) La tâche -> Async
@Benjol - J'ai écrit un type similaire en C #. C'était environ 300 lignes de code. La différence étant une API simplifiée.
@Benjol: Je pense que la réécriture de la boîte aux lettres de la boîte aux lettres en C # serait une option aussi. Il n'est pas facile d'obtenir le droit de verrouillage et de synchronisation (en particulier pour tryscan code> méthode), mais je pense que cela devrait fonctionner (vous pouvez toujours éviter la récursion, mais dans le cas de machines d'état i > Le code a l'air assez mauvais, il est donc regrettable si c'est ce que les utilisateurs doivent écrire)
Vous pourriez ne pas regarder regarder Stack . Il n'a pas été mis à jour dans un peu de temps, mais si vous vouliez faire quelque chose avec un petit support C #, vous pourriez le trouver un bon point de départ. Je ne pense pas que ce soit à jour avec async / attendre, cependant. P>
Pourriez-vous réparer le lien brisé?
@CZIFRO, OK FAIT.