7
votes

Comment puis-je faire des opérations ASYNC de la mienne avec WinRT à l'aide d'une interface IAsyncOperation?

Je développe une demande de métro et je souhaite créer des opérations asynchronisées dont mes propres cours implémentaient.

J'ai trouvé des exemples d'asynchronisation utilisant des opérations WinRT (par exemple CreatefileAseync). Je ne trouve aucune intention où quelqu'un crée une méthode async et la consommant.


3 commentaires

Pourquoi n'essayez-vous pas simplement de mettre en œuvre les méthodes en fonction de la documentation (plutôt rare)?


Il est évident que vous n'avez pas une connaissance approfondie de ce qui est impliqué. C'est ce que suggère la documentation.Esséven alors merci.


Je ne comprends pas. La documentation suggère de demander à ce jour?


6 Réponses :


2
votes

Oui, voir Ben Kuhn's // Build / Talk: http: // canal9 .msdn.com / Events / Build / Build2011 / Plat-203T Il montre comment construire une API asynchrone.

À l'heure actuelle, il n'y a pas de bonne solution pour les classes de haut niveau (C ++ / WX). Toutefois, si vous utilisez les interfaces Bas de niveau C ++, vous pouvez utiliser la classe WRL :: Asyncbase pour vous aider à créer vos interfaces ASYNC.

ici est la documentation sur la classe Asyncbase.


3 commentaires

AFAICS, il montre comment construire une interface asynchronisation à l'aide de la classe .NET asyncinfofacory , qui n'est pas disponible à partir de C ++ / CX.


PPL est la solution à long terme, évidemment ce n'est pas une option actuelle. Mais les API ASYNC sont relativement simples. Jetez un coup d'œil à wrl \ async.h, la classe WRL :: Asyncbase Classe vous permet de créer une classe C ++ asynchrone. Notez que cela ne fonctionne que avec des classes C ++ de niveau bas, pas des classes de niveau élevé, il peut donc y avoir des défis pour que cela fonctionne pour que cela fonctionne sur les constructions de prévisualisation du développeur.


Merci à tous. Il semble que cela semble plus raisonnable qu'attends à la SM avec une solution et des modèles. Malgré tout, je suis récurrent à ce matériel, mais comme vous pouvez le constater, ils ne m'ont pas permis de suivre n'importe quel chemin.



2
votes

J'ai posté la même question dans Microsoft Forums et ils m'ont donné deux réponses. Le premier était:

salut claudio,

Dans l'aperçu du développeur, il n'y a pas de moyen facile de créer votre propre ASYNC Opérations. Nous sommes au courant de cette lacune et essayons de résolvez-le pour la prochaine version pubienne. En attendant, vous pourriez concevoir votre API comme ASYNC et nous fournirons des conseils sur la manière de Convertir Sync en ASYNC.

merci

Raman Sharma, Visual C ++

Quand j'ai demandé la difficile façon de faire cela, un autre gars, une personne responsable de PPL m'a dit:

Nous prévoyons de faire un rafraîchissement du pack échantillon que nous avons publié quelques-uns Il y a des semaines et ajoutez quelques échantillons sur la création d'opérations ASYNC. je Attendez-vous à ce que cela se produise dans quelques semaines environ. Si vous gardez un oeil sur notre blog chez http://blogs.msdn.com/b/nativeconcurency , vous ' ll Soyez le premier à savoir.

quant à la difficulté c'est ... la solution à usage général que nous sommes envisager est d'environ 1000 lignes de code C ++ faisant une utilisation copieuse de Modèle métaprogrammation. La plupart d'entre eux seront dans le fichier d'en-tête afin que vous peut l'explorer vous-même. Alors qu'une solution moins générale peut être moins complexe, vous aurez toujours besoin de mettre en œuvre une classe de base, faire l'état gestion, manipulation des erreurs, etc. À ce moment-là, je ne peux pas entrer dans plus détail, mais je dirai que vous allez adorer à quel point il est facile d'auteur Opérations asynchrones avec ppl - alors accrochez-vous!

L'équipe d'Artur Laksberg PPL

Alors, il n'y a pas de solution à ce moment-là. Merci à tous.


0 commentaires

4
votes

Vous pouvez maintenant le faire. Regardez ceci:

http://blogs.msdn.com/b/nativeconcurency/Rarchive/2011/10/27/try-it-now-use-ppl-a-produce-windows-8- asynchrones-opérations.aspx

http://code.msdn.microsoft.com/windows-8- Asynchrone-08009A0D

Production ASYNC WinRT à l'aide de C ++


0 commentaires

4
votes

Utilisez Catégorie_async en C ++:

public IAsyncOperation<IInfo> Async()
{
    return AsyncInfo.Run(_ =>
        Task.Run<AType>(async () =>
        {
            return await DoAsync();
        })
    );
}


2 commentaires

Il y a un mot-clé attendu en C ++ / CX maintenant? Et tpl aussi? :) Mais c'est toujours un bon conseil pour .NET


Je suis désolé. La langue n'est pas spécifiée dans la question.



0
votes

Il est confus, mais il y a une différence entre WinRT C ++ Code et WRL. Vous pouvez utiliser directement le code WRL à la couche abi. WRL n'utilise pas d'exceptions, mais aime les modèles. Le style de codage recommandé pour WinRT n'est pas le même que WRL.

Je ne suis pas sûr si tout le monde peut faire cela, mais utiliser WRL vous en général besoin de mettre en œuvre une classe qui hérite: xxx

alors vous pouvez utiliser xxx


0 commentaires

0
votes

C ++ WinRT est maintenant le meilleur moyen d'implémenter des méthodes WinRT Async. Ceci utilise co_await et co_return , de nouvelles fonctionnalités de langue C ++ (dans le processus de normalisation). Lire les docs sur Cette page .


0 commentaires