ASP.Net 의 async+await 비동기 프로 그래 밍 실현
사용법:
public async Task<int> GetDotNetCountAsync()
{
// Suspends GetDotNetCount() to allow the caller (the web server)
// to accept another request, rather than blocking on this one.
var html = await _httpClient.GetStringAsync("https://dotnetfoundation.org");
return Regex.Matches(html, @"\.NET").Count;
}
요점!!!1."async"는 하나의 방법 을 비동기 방법 으로 표시 합 니 다.비동기 방법 은 체 내 에"await"키 워드 를 결합 하여 사용 해 야 합 니 다.await 가 없 으 면 이 방법 은 일반적인 방법 과 같 습 니 다.비동기 방법의 명명 규칙 은 보통 Async 로 끝난다.
2."await"키 워드 는 비동기 방법 에서 만 사용 할 수 있 습 니 다.
3.async 비동기 방법 에서 await 작업 을 만 났 을 때 await 는 이 비동기 방법 이 계속 실행 되 지 않 는 것 을 막 고 이 비동기 측 을 걸 어 제어 권 을 이 비동기 방법의 호출 자 에 게 전달 합 니 다.
4.비동기 방법의 호출 자가 제어 권 을 획득 한 후:
1)호출 자가 비동기 방법의 반환 결 과 를 사용 해 야 한다 면 비동기 방법 이 실 행 될 때 까지 기 다 렸 다가 계속 아래로 실행 합 니 다.
2)호출 자가 비동기 방법의 반환 결과 에 관심 이 없 으 면 계속 실행 합 니 다.
필드 1:async 방법 중 await 사용 하지 않 음
static void Main(string[] args)
{
Console.WriteLine(" Main..... ID:" + Thread.CurrentThread.ManagedThreadId.ToString());// ①
GetResultAsync();
Console.WriteLine(" Main.... ID:" + Thread.CurrentThread.ManagedThreadId.ToString());// ②
Console.ReadKey();
}
async static Task<int> GetResultAsync()
{
Console.WriteLine(" GetResult..... ID:" + Thread.CurrentThread.ManagedThreadId.ToString());// ③ Task.Delay(3000).Wait();
Console.WriteLine(" GetResult..... ID:" + Thread.CurrentThread.ManagedThreadId.ToString());// ④
return 10;
}
집행 결과:절차 ①―절차 ③―절차 ④―>절차 ②결과 분석:
주 함수 Main 에서 비동기 방법 GetResultAsync 를 호출 할 때 비동기 방법 에'await'키워드 가 부족 하기 때문에 주 함 수 는 비동기 방법 절차 3,4 를 모두 실행 한 후에 절 차 를 계속 실행 해 야 합 니 다.2.실행 순 서 는 동기 화 방법 집행 순서 와 일치 합 니 다.
그리고 비동기 적 인 방법 은 문법 적 힌트 를 줍 니 다."await"키워드 가 부족 합 니 다.
장면 2:비동기 방법 으로 체 내 에서 await 를 만난 후 즉시 제어 권 을 호출 자 에 게 이전 합 니 다.
static void Main(string[] args)
{
Console.WriteLine(" Main..... ID:" + Thread.CurrentThread.ManagedThreadId.ToString());// ① GetResultAsync();
Console.WriteLine(" Main.... ID:" + Thread.CurrentThread.ManagedThreadId.ToString());// ②
Console.ReadKey();
}
async static Task<int> GetResultAsync()
{
Console.WriteLine(" GetResult..... ID:" + Thread.CurrentThread.ManagedThreadId.ToString());// ③
await Task.Delay(3000);
Console.WriteLine(" GetResult..... ID:" + Thread.CurrentThread.ManagedThreadId.ToString());// ④
return 10;
}
집행 결과:절차 ① 절차 ③―절차 ②―절차 ④결과 분석:
주 함수 Main 에서 비동기 방법 GetResultAsync 를 호출 하여 비동기 방법 에서"await"키 워드 를 만 났 을 때
1)현재 비동기 방법 을 차단 하고 즉시 호출 자 주 함수 Main 에 제어권 전달
2)주 함수 가 제어 권 을 획득 한 후 계속 실행 하 는 방법 체 내 절차 2,GetResultAsync 방법 은 비동기 실행(비동기 작업 이 끝 난 후 실행 절차 4).
장면 3:비동기 방법 체 내 에서 await 를 만난 후 즉시 제어 권 을 호출 자의 손 에 넘 기 고 호출 자 는 비동기 방법 이 결 과 를 되 돌려 줄 때 까지 기 다 려 야 합 니 다.
static void Main(string[] args)
{
Console.WriteLine(" Main..... ID:" + Thread.CurrentThread.ManagedThreadId.ToString());// ①
Task<int> res = GetResultAsync();
Console.WriteLine(" Main.... ID:" + Thread.CurrentThread.ManagedThreadId.ToString());// ②
Console.WriteLine(" :" + res.Result + ".... ID:" + Thread.CurrentThread.ManagedThreadId.ToString());// ③
Console.ReadKey();
}
async static Task<int> GetResultAsync()
{
Console.WriteLine(" GetResult..... ID:" + Thread.CurrentThread.ManagedThreadId.ToString());// ④
await Task.Delay(3000);
Console.WriteLine(" GetResult..... ID:" + Thread.CurrentThread.ManagedThreadId.ToString());// ⑤
return 10;
}
집행 결과:절차 ①―절차 ④―절차 ②―절차 ⑤―절차 ③결과 분석:
주 함수 Main 에서 비동기 방법 GetResultAsync 를 호출 하여 비동기 방법 에서"await"키 워드 를 만 났 을 때
1)현재 비동기 방법 을 차단 하고 즉시 호출 자 주 함수 Main 에 제어권 전달
2)주 함수 가 제어 권 을 획득 한 후 계속 실행 하 는 방법 은 체 내 절차 2 와 절차 3 이 고 GetResultAsync 방법 은 비동기 로 실행 된다.
3)주 함수 가 3 단 계 를 실행 할 때 3 단 계 는 비동기 방법의 반환 결 과 를 인쇄 해 야 하기 때문에 비동기 방법 이 끝 날 때 까지 기 다 려 야 계속 할 수 있다.그래서 먼저 5 절 차 를 집행 한 다음 에 3 절 차 를 계속 집행 해 야 한다.
마지막 으로 비동기 프로 그래 밍 을 할 때 우 리 는 보통 Task 와 결합 하여 사용한다.
ASP.Net 의 async+await 비동기 프로 그래 밍 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 ASP.Net async+await 비동기 프로 그래 밍 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
방법: 데이터베이스에서 선택한 날짜를 Calendar 컨트롤에 표시합니다.Calendar 컨트롤은 데이터 연결을 직접 지원하지 않습니다. 즉, 달력을 데이터 원본에 전체적으로 연결하는 것이 아닙니다.대신 코드를 작성하여 필요한 데이터를 가져오면 Day Render 이벤트에서 현재 표시된 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.