Heim  >  Artikel  >  Backend-Entwicklung  >  C# 5.0 führt zwei Schlüsselwörter ein: „async“ und „await“.

C# 5.0 führt zwei Schlüsselwörter ein: „async“ und „await“.

零下一度
零下一度Original
2017-06-23 16:28:282470Durchsuche

C# 5.0 führte zwei Schlüsselwörter ein, async undawait, die uns erheblich dabei geholfen haben, den Implementierungscode der asynchronen Programmierung zu vereinfachen, und die Aufgaben in TPL haben eine großartige Beziehung zu async undawait

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 ist ein synchrones Ausführungsprogramm, während Wait die Rolle des Teilens von Fragmenten und des Anhaltens des Aufrufers spielt und keine neuen Threads erstellt. Laut der Analyse des Masters:

Der erste Teil des Code und der spätere Teil des Codes, in dem das Schlüsselwort „await“ erscheint, werden synchron ausgeführt (das heißt, sie werden im aufrufenden Thread ausgeführt, bei dem es sich um den GUI-Thread handelt, sodass kein Problem des threadübergreifenden Zugriffs auf Steuerelemente besteht). Ein kritischer Codeausschnitt wird in einem Thread-Pool-Thread ausgeführt.

Im obigen Code werden von FCL gekapselte Methoden wie GetResponseAsync aufgerufen, um den aktuellen UI-Thread nicht zu blockieren. Wait erstellt keinen neuen Thread, aber soweit hier, erstellt der Wait-Ausdruck den neuer Thread – GetResponseAsync leistet so viel, dass es die Illusion einer oberflächlichen Synchronisierung erzeugt. Ich habe zuvor einen Artikel geschrieben
Studiennotizen zur asynchronen C#-Programmierung und zum Erwarten

Das Schlüsselwort „await“ ist eng mit „Task“ verbunden. Aus seinem spezifischen Rückgabewert ist ersichtlich, dass das tiefere „await“ äquivalent sein sollte Um eine asynchrone Implementierung zu erreichen, muss die continuewith-Funktion von task daher entweder die von FCL gekapselte asynchrone Methode aufrufen, oder wir können task selbst aufrufen, um einen neuen Thread zu erstellen und die Aufgaben des UI-Threads zu verhindern UI-Thread wird nicht blockiert.

Das obige ist der detaillierte Inhalt vonC# 5.0 führt zwei Schlüsselwörter ein: „async“ und „await“.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn