Combien différente est l'attendent/asynchrone à partir de filetage?

Je suis en train de me familiariser avec le c#'s new attendent/async mots-clés, et j'ai trouvé plusieurs aspects dont je ne comprends pas très bien.

  1. Commençons avec des conditions de course:

    Stream s=...
    ...
    for(int i=0;i<100;i++)
    {
        s.WriteAsync(new byte[]{i},0,1);
    }

    ce travail comme prévu tout le temps (par exemple, écrire dans le fichier 12345..... et pas 13254 ou quelque chose)?

    La deuxième chose, c'est que async fonction s'exécute en mode synchrone si elle ne contient pas attendre de l'opérateur. Et, selon la documentation de microsoft, async fonctions de toujours exécuter dans le thread appelant (par rapport à BeginInvoke). Ce qui m'amène à 3 questions suivantes:

  2. Combien de async fonction est exécutée avant qu'il libère à l'appelant de la fonction?

    async void MyAsyncFunction()
    {
        Operation1();
        Operation2();
        Operation3();
        ....
        Stream s=...;
        await s.WriteAsync(....);
    }

    Dans les articles sur les attendent/async que j'ai lu, il est dit que async fonctions sans attendre l'opérateur d'exécuter séquentiellement, et avec async/await retour imminent. Mais c'est en me harcelant que MyAsyncFunction peut toujours exécuter Operation1...Operation3 avant de la relâcher dès qu'elle touche await s.WriteAsync.

  3. Ce que si j'utilise Thread.Sleep dans l'asynchrone en fonction comme ceci:

    async void DoStuff()
    {
        Stream s=...;
        ...
        await s.WriteAsync(....);
        Thread.Sleep(10000);
        ....
    }

    Sera Le Fil.Le sommeil de bloquer le thread entier dans lequel il est exécuté ou tout simplement de la fonction async?

  4. Ce que si j'utilise semaphore.Wait() dans l'un des async fonctions et il va attendre pour le sémaphore à être libéré par une autre fonction async. Sera-ce de se comporter comme il le ferait avec les fils, ou que ça va provoquer un blocage?

  5. await ne fonctionne pas en dehors de async fonctions. Pourquoi?

  • Vous avez demandé trop de questions dans un post - it serait difficile d'y répondre de manière cohérente. Il semble que vous devriez vraiment faire un peu plus de recherche (il y a beaucoup d'informations sur Visual Studio Async page d'accueil, par exemple) et ensuite poser une question précise à un moment.
  • Umm. async/await est threading. Juste une utilisation plus efficace des threads.
  • voir msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx : The async and await keywords don't cause additional threads to be created. Async methods don't require multithreading because an async method doesn't run on its own thread. The method runs on the current synchronization context and uses time on the thread only when the method is active.
  • J'ai lu beaucoup de choses sur ce, et ce sont des questions je suis à gauche APRÈS la lecture de la documentation. Mais peut-être, je n'ai pas trouvé la bonne documentation, après tout. Pourriez-vous m'indiquer?
  • Je viens de cité dans les commentaires ci-dessus
  • Je voudrais commencer à msdn.microsoft.com/en-us/subscriptions/async.aspx
  • Cette SI-question permet également de répondre à ceci: stackoverflow.com/questions/37419572/...

InformationsquelleAutor Arsen Zahray | 2012-11-17