Maison  >  Article  >  développement back-end  >  C# 5.0 introduit deux mots-clés : async et wait

C# 5.0 introduit deux mots-clés : async et wait

零下一度
零下一度original
2017-06-23 16:28:282469parcourir

C# 5.0 introduit deux mots-clés, async et wait, qui nous aident à simplifier dans une large mesure le code d'implémentation de la programmation asynchrone, et les tâches dans TPL sont étroitement liées à async et wait

private async void button1_Click(object sender, EventArgs e)
        {
            var length = AccessWebAsync();

            // 这里可以做一些不依赖回复的操作
            OtherWork();

            this.textBox1.Text += String.Format("\n 回复的字节长度为:  {0}.\r\n", await length);
            this.textBox2.Text = Thread.CurrentThread.ManagedThreadId.ToString();
        }

        private async Task<long> AccessWebAsync()
        {
            MemoryStream content = new MemoryStream();

            // 对MSDN发起一个Web请求
            HttpWebRequest webRequest = WebRequest.Create("http://msdn.microsoft.com/zh-cn/") as HttpWebRequest;
            if (webRequest != null)
            {
                // 返回回复结果
                using (WebResponse response = await webRequest.GetResponseAsync())
                {
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        await responseStream.CopyToAsync(content);
                    }
                }
            }

            this.textBox3.Text = Thread.CurrentThread.ManagedThreadId.ToString();
            return content.Length;
        }

        private void OtherWork()
        {
            this.textBox1.Text += "\r\n等待服务器回复中.................\n";
        }

async est un programme d'exécution synchrone, tandis que wait joue le rôle de division des fragments et de suspension de l'appelant, et ne crée pas de nouveaux threads D'après l'analyse du maître :

La première partie de. le code et la dernière partie du code où apparaît le mot-clé wait sont exécutés de manière synchrone (c'est-à-dire qu'ils sont exécutés sur le thread appelant, qui est le thread de l'interface graphique, il n'y a donc pas de problème d'accès cross-thread aux contrôles), wait L'extrait de code critique est exécuté sur un thread de pool de threads.

Dans le code ci-dessus, des méthodes telles que GetResponseAsync encapsulées par FCL sont appelées afin de ne pas bloquer le thread d'interface utilisateur actuel. wait ne crée pas de nouveau thread, mais pour autant qu'ici, l'expression wait crée le. nouveau fil de discussion - GetResponseAsync fait tellement de choses qu'il crée l'illusion d'une synchronisation superficielle. J'ai déjà écrit un article
Notes d'étude sur la programmation asynchrone C# async et wait

Le mot-clé wait est étroitement lié à Task. Il peut être vu à partir de sa valeur de retour spécifique que l'attente plus profonde devrait être équivalente à. la fonction continuewith de task. Par conséquent, l'utilisation des mots-clés async & wait pour réaliser une implémentation asynchrone doit soit appeler la méthode asynchrone encapsulée par FCL, soit nous pouvons appeler task nous-mêmes pour créer un nouveau thread pour partager les tâches du thread d'interface utilisateur afin d'empêcher le Le fil de l'interface utilisateur doit être bloqué.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn