>  기사  >  백엔드 개발  >  C# 5.0에는 async와 wait라는 두 가지 키워드가 도입되었습니다.

C# 5.0에는 async와 wait라는 두 가지 키워드가 도입되었습니다.

零下一度
零下一度원래의
2017-06-23 16:28:282470검색

C# 5.0에는 비동기 프로그래밍의 구현 코드를 크게 단순화하는 데 도움이 되는 async 및 Wait라는 두 가지 키워드가 도입되었으며, TPL의 작업은 async 및 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는 동기 실행 프로그램입니다. , Wait는 조각을 나누고 호출자를 일시 중지하는 역할을 하지만 새로운 스레드를 생성하지 않습니다. 마스터의 분석에 따르면:

Await 키워드가 나타나는 코드의 앞부분과 코드의 뒷부분입니다. 동기적으로 실행됩니다(즉, 호출 스레드, 즉 GUI 스레드에서 실행되므로 컨트롤에 대한 크로스 스레드 액세스 문제가 없습니다). Wait의 키 코드 조각은 스레드 풀 스레드에서 실행됩니다. .

위 코드에서는 현재 UI 스레드를 차단하지 않도록 FCL로 캡슐화된 GetResponseAsync와 같은 메서드가 호출됩니다. 그러나 이에 관한 한 실제로는 새 스레드가 생성됩니다. 식 대기 - - GetResponseAsync가 수행하는 작업은 피상적인 동기화의 환상을 만드는 것입니다.
C#async 및 Wait 비동기 프로그래밍 연구 노트

await 키워드는 Task와 밀접한 관련이 있다는 기사를 작성한 적이 있습니다. 이는 Wait와 Task의 더 깊은 continuewith 함수가 동일해야 함을 특정 반환 값에서 볼 수 있습니다. 비동기 구현을 달성하기 위해 async 및 wait 키워드를 사용하면 FCL로 캡슐화된 비동기 메서드를 호출하거나 작업을 직접 호출하여 UI 스레드가 차단되는 것을 방지하기 위해 UI 스레드의 작업을 공유하는 새 스레드를 생성합니다.

위 내용은 C# 5.0에는 async와 wait라는 두 가지 키워드가 도입되었습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.