c# 비동기 프로그램 예제

나는 원래 농담으로 제출 CodeMash 2019에서 강연을했다. 기존 동기 C# 및 ASP.NET 응용 프로그램을 비동기를 활용하고 일반적으로 키워드 및 비동기 프로그래밍을 기다리는 응용 프로그램으로 리팩터링하는 것에 대해 « 잠깐 만요, 잠깐 만요, 비동기를 넣자 »라고 불렀습니다. .NET 코드베이스에서 비동기 프로그래밍을 구현하기 시작하면 근처 코드로 얼마나 빠르게 전파되는지 알 수 있습니다. 그것은 바이러스에 필적; 그것은 접촉에 오는 것들을 감염하는 것을 좋아한다. 이제 두 번째 예제에서 Method1 Lucian Wischik에 종속된 Method3이 Microsoft에서 관리되는 언어에 대한 수석 프로그램 관리자라고 가정합니다. 그는 비동기 프로그래밍과 관련된 다양한 시나리오에서 수행해야 할 작업을 심층적으로 설명하는 컨퍼런스에서 여러 프레젠테이션을 만들었습니다. 이제 비동기적으로 호출할 준비가 되었습니다. 대기대기와 매우 비슷합니다. 예 이 키워드는 모든 함수를 비동기적으로 호출하려는 경우에 사용됩니다.

await 키워드를 사용하는 방법을 이해하려면 다음 예제를 살펴보십시오. 생각해 봅시다. 다음에서 우리는 장기 실행 process.public 정적 작업 LongProcess() 이전 예제 (나쁜 I/O에 대 한)에 비해이 하나 뿐만 아니라 빠른, 하지만 또한 어떤 작업자 스레드를 사용 하지 않았다 정의! 적게 사용함으로써, 우리는 더 많은 것을 달성했습니다! 동시성은 겹치는 기간에 두 개 이상의 작업을 시작, 실행 및 완료할 수 있는 경우입니다. 그것은 반드시 그들이 이제까지 모두 같은 순간에 실행 됩니다 의미 하지는 않습니다. 예를 들어 단일 코어 컴퓨터에서 멀티태스킹을 할 수 있습니다. 여기서는 비동기 프로그래밍을 사용하여 파일의 모든 내용을 읽고 있으므로이 메서드에서 반환 값을 얻고 다른 코드 줄을 실행하기를 기다리지 않지만 await 키워드를 사용하기 때문에 아래에 지정된 코드 줄을 기다려야합니다. 아래 코드 줄에 대한 반환 값을 사용합니다. 그래서 지금은 비동기 프로그래밍으로 리팩터링을 시작하도록 « 강요 »됩니다 (쿠키를 먹기 위해 « 강제로 »될 것입니다). 그러나, 나는 또한 현실 세계에서 개발자, 그리고 차라리 최소한의 노력으로 수행 하는 대부분의 작업을 얻을 하 고 싶습니다. 그래서 여기 내가 할 거 야: 난 그냥 비동기에 저장소를 리팩터링 거 야, 그리고 하지 높은 수준의 PhotoController. 이 예제에서는 비동기 방식으로 파일을 다운로드하는 WebClient의 특수 비동기 메서드를 사용했습니다. 24초밖에 걸리지 않았으며 작업자 스레드를 사용하지 않았습니다.

아래 스크린 샷에 표시되는 4 개의 스레드는 어쨌든 모든 앱에 대해 만들어진 스레드 풀에서 가져옵니다. ASP.NET 비동기 프로그래밍(AKA 비동기/대기)을 구현하면 시스템이 동일한 하드웨어에서 더 많은 요청을 처리할 수 있으므로 해당 시스템의 처리량(성능이 아님)이 증가합니다. I/O 바인딩된 작업을 캡슐화하여 이 작업을 수행합니다. 비동기는 바이러스처럼 확산되며 일반적으로 좋은 일이지만 응용 프로그램에서 구현을 시작할 위치를 결정할 때 이 점을 염두에 두어야 합니다. I/O 하위 시스템이 더 빠르면 프로그램이 I/O 바인딩됩니다. 어떤 정확한 I/O 시스템이 다를 수 있는지를 의미합니다. 일반적으로 디스크와 연결합니다. 병목 현상은 디스크에서 데이터를 읽는 것이기 때문에 일부 데이터에 대한 거대한 파일을 통해 보는 프로그램은 종종 I /O 바인딩됩니다.

Ce contenu a été publié dans Non classé. Vous pouvez le mettre en favoris avec ce permalien.

Les commentaires sont fermés.