마이크로소프트가 Async CTP를 출시한 지 한 달이 지났는데 모두가 화제를 모으고 있는 Async입니다. Async에 이미 익숙하신 분들은 건너뛰시기 바랍니다... 저 같은 경우에는 비동기 프로그래밍에 대해 조금밖에 모르시겠지만, 이전 내용은 비동기 프로그래밍이 더 까다롭습니다. 그렇다면 차세대 C#이 우리에게 가져올 것이 무엇인지 살펴보겠습니다. (비동기 CTP는 VB도 지원합니다.)
이 글의 예시는 Async CTP SP1 Refresh를 기준으로 작성되었습니다. Async는 아직 CTP 단계이기 때문에 아직 많은 논의가 진행 중이니 까지 기다려주시면 될 것 같습니다. C# 5.0 출시 시 세부 사항이 변경됩니다. 그러나 일반적인 아이디어와 개념은 크게 바뀌어서는 안 됩니다.
본점으로 이동:
먼저 Async 기능을 사용해 보세요. Visual Studio 2010 SP1 및 Microsoft Visual Studio Async CTP(SP1 Refresh)를 설치해야 합니다.
먼저 간단한 작업을 설정해 보겠습니다. 콜백을 사용하여 비동기 프로그래밍을 개선하고 비동기프로그래밍 방법을 분석하고, Async정확히 무엇이고 우리에게 무엇을 가져다 주는지 살펴보겠습니다.
작업:
버튼을 클릭하면 Windows Form 애플리케이션을 만듭니다. 먼저 한 줄의 단어를 표시합니다. 예를 들어 상태를 나타내는 무언가 계산을 시작한 다음 1에서 int.Max/2까지 계산합니다. 결과를 누적하여 표시합니다.
동기화를 수행합니다.
먼저 기본 알고리즘을 구현하는 함수를 작성합니다.
#region Do things public long DoSomething( int n) { long result = 1; for ( int i = 1; i <= n; i++) { result += i; } return result; } #endregion
|
然后,添加一个按钮的Click事件处理程序:
private void btnSync_Click( object sender, EventArgs e) { lblResult.Text = "Start to do something . . ." ; long value = DoSomething( int .MaxValue / 2); lblResult.Text = value.ToString(); } |
代码第一行改写Label的字样;第二行调用算法获得结果;第三行把结果输出。看似挺不算的。运行一下,就会发现有两个问题:
这个算法需要四五秒钟左右的实现时间,并且在这几秒钟的时间里,界面是锁死的,也就是说应用程序就像死了一样,它不接受任何用户操作。(也许我的电脑比较差,呵呵,所以,如果你没有遇到这种情况,请加大输入参数的值,让它算一会儿。)
我们没有看到Start to do something这一行字。
OK,出现这个现象也是可以理解的,因为我们把大量的运算添加到了UI线程里面了。所以,解决方法就是把它放到外面。我试了一下不用Async,实现的代码如下:
private void btnCallback_Click( object sender, EventArgs e) { lblResult.Text = "Start to do something . . ." ; Func< int , long > callBackDelegate = this .DoSomething; callBackDelegate.BeginInvoke( int .MaxValue / 2, new AsyncCallback( a => { lblResult.Invoke( new MethodInvoker(() => { lblResult.Text = callBackDelegate.EndInvoke(a).ToString(); })); }), null ); } |
如果你觉得这段代码比较晕,那就跳过这一节吧。可能我代码写得不好,大家将就看我简单解释一下,我首先给DoSomething写了一个代理,然后,调用了代理的BeginInvoke方法,把算法放到了其它的Thread中去调用了。这个代理执行完了以后,因为它不会直接返回一个long型的值,而是会去执行一个AsyncCallBack,所以,就在这个Callback里,去调用这个代理的EndInvoke()。
好吧,且不论代码质量,这个就是有Async之前的一种实现异步的方法。
从这个代码里,我们完全看不到原来代码的影子,我也没有办法像解释同步代码一样解释:第一、第二、第三……有了Async之后呢?呵呵,代码说明一切:
public Task < long > DoSomethingAsync( int n) { return TaskEx .Run< long >(() => DoSomething(n)); } private async void btnAsync_Click( object sender, EventArgs e) { lblResult.Text = "Start do something..." ; var x = await DoSomethingAsync( int .MaxValue / 2); lblResult.Text = x.ToString(); } |
세 가지:
첫 번째: 파일 참조 추가: AsyncCtpLibrary.dll. Async가 정식 출시된 후에는 .NET 애플리케이션 세트에 나타날 것으로 믿습니다.
두 번째: DoSomething을 Task로 캡슐화합니다.
셋째: async, await 등의 키워드를 추가하세요.
코드를 자세히 살펴보겠습니다.
먼저 비동기적으로 실행될 코드의 반환 값을 작업
그런 다음 Run
공부에 관심이 있다면 Run
첫 번째 줄은 Label; 두 번째 줄은 결과를 얻기 위해 알고리즘을 호출합니다. 이 줄에 복사됨/이전 기사에서 붙여넣음:-)
헤헤 자세히 살펴보고Sync와 Async 코드:
비동기 | |
비공개 무효 btnSync_Click(개체 발신자, EventArgs e) |
비공개 비동기 무효 btnAsync_Click(객체 발신자, EventArgs e) |
먼저 메서드 이름에 async를 추가하여 이것이 비동기 호출을 사용하는 메서드임을 선언합니다.
그런 다음 await 키워드를 반환하기 전에 함수 호출(DoSomethingAsync)을 추가합니다. x가 어떤 유형인지 추측해 볼까요? 정답은 긴형 입니다. await을 사용하면 설계 중에도 컴파일러가 자동으로 Task
기능이 우리에게 가져다 주는 것은 무엇일까요? 비동기 프로그래밍의 능력인가? 콜백을 사용하여 비동기 작업을 수행할 수도 있으며 IAsyncCallback 인터페이스는 .NET 1.1에 있어야 합니다. 에서 구현되었습니다. 멀티 스레드 네임스페이스도 오랫동안 존재했습니다. Task는 C# 4.0... 제 생각에는
Async
가 프로그래머들에게 로직 중심의 코드를 제공하는 것 같아요. 다중 구현 스레드 프로그래밍. 최종 비교를 통해 Async의 코드는 Sync의 코드와 거의 동일하며, 프로그램은 no 콜백, 동기화 등의 문제를 고려하십시오. 이는 C#이 무엇을 더 열심히 설명하는지에 대한 방향과 일치합니다. 어떻게 하느냐보다는 끝났다. 마지막으로 애플리케이션 다운로드 및 소스 코드와 실행 인터페이스 스크린샷을 첨부합니다... (알겠습니다. 저는 아티스트가 아닙니다. 양해해 주시기 바랍니다. 나:-)
)
소스 코드를 다운로드하려면 클릭
비동기
보기 실행 프롬프트로 이동:
실행 결과 표시:
위 내용은 C# 5.0 함수의 Async에 대한 자세한 그래픽 코드 설명을 한눈에 볼 수 있습니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!

C# 및 .NET 런타임은 개발자가 효율적이고 강력하며 크로스 플랫폼 개발 기능을 강화하기 위해 긴밀히 협력합니다. 1) C#은 .NET 프레임 워크와 완벽하게 통합하도록 설계된 유형 안전 및 객체 지향 프로그래밍 언어입니다. 2) .NET 런타임은 C# 코드 실행을 관리하고, 쓰레기 수집, 유형 안전 및 기타 서비스를 제공하며, 효율적이고 크로스 플랫폼 운영을 보장합니다.

C# .NET 개발을 시작하려면 다음과 같은 것이 필요합니다. 1. C#의 기본 지식과 .NET 프레임 워크의 핵심 개념을 이해하십시오. 2. 변수, 데이터 유형, 제어 구조, 기능 및 클래스의 기본 개념을 마스터하십시오. 3. LINQ 및 비동기 프로그래밍과 같은 C#의 고급 기능을 배우십시오. 4. 일반적인 오류에 대한 디버깅 기술 및 성능 최적화 방법에 익숙해 지십시오. 이러한 단계를 통해 C#.NET의 세계를 점차적으로 침투하고 효율적인 응용 프로그램을 작성할 수 있습니다.

C#과 .NET의 관계는 분리 할 수 없지만 같은 것은 아닙니다. C#은 프로그래밍 언어이며 .NET은 개발 플랫폼입니다. C#은 코드를 작성하고 .NET의 중간 언어 (IL)로 컴파일하고 .NET 런타임 (CLR)에 의해 실행되는 데 사용됩니다.

C#.NET은 여러 응용 프로그램 개발을 지원하는 강력한 도구 및 라이브러리를 제공하기 때문에 여전히 중요합니다. 1) C#은 .NET 프레임 워크를 결합하여 개발 효율적이고 편리하게 만듭니다. 2) C#의 타입 안전 및 쓰레기 수집 메커니즘은 장점을 향상시킵니다. 3) .NET은 크로스 플랫폼 실행 환경과 풍부한 API를 제공하여 개발 유연성을 향상시킵니다.

C#.NETISVERSATILEFORBOTHWEBBANDDESKTOPDEVENTROMMENT.1) FORWEB, useASP.NETFORRICHINTERFACES.3) FORDESKTOP.3) USEXAMARINFORCROSS-PLATFORMDEEVENTRIMMENT, LINABILEDEV, MACODEDEV, and MACODEDOWS, 및 MACODEDOWS.

C# 및 .NET는 지속적인 업데이트 및 최적화를 통해 신흥 기술의 요구에 적응합니다. 1) C# 9.0 및 .NET5는 레코드 유형 및 성능 최적화를 소개합니다. 2) .NETCORE는 클라우드 네이티브 및 컨테이너화 된 지원을 향상시킵니다. 3) ASP.NETCORE는 최신 웹 기술과 통합됩니다. 4) ML.NET는 기계 학습 및 인공 지능을 지원합니다. 5) 비동기 프로그래밍 및 모범 사례는 성능을 향상시킵니다.

C#.netissuitable forenterprise-levelapplications는 richlibraries, androbustperformance, 그러나 itmaynotbeidealforcross-platformdevelopmentorwhenrawspeediscritical, wherelanguagesslikerustorthightordogrordogrognegrognegrognegrognecross-platformdevelopmentor.

.NET에서 C#의 프로그래밍 프로세스에는 다음 단계가 포함됩니다. 1) C# 코드 작성, 2) 중간 언어 (IL)로 컴파일하고 .NET 런타임 (CLR)에 의해 실행됩니다. .NET에서 C#의 장점은 현대적인 구문, 강력한 유형 시스템 및 .NET 프레임 워크와의 긴밀한 통합으로 데스크탑 응용 프로그램에서 웹 서비스에 이르기까지 다양한 개발 시나리오에 적합합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
