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 중국어 웹사이트의 기타 관련 기사를 참조하세요!