백엔드 개발 C#.Net 튜토리얼 C# 5.0 함수 Async의 자세한 그래픽 코드 설명 한눈에 보기

C# 5.0 함수 Async의 자세한 그래픽 코드 설명 한눈에 보기

Mar 03, 2017 pm 01:30 PM

마이크로소프트가 Async CTP를 출시한 지 한 달이 지났는데 모두가 화제를 모으고 있는 Async입니다. Async에 이미 익숙하신 분들은 건너뛰시기 바랍니다... 저 같은 경우에는 비동기 프로그래밍에 대해 조금밖에 모르시겠지만, 이전 내용은 비동기 프로그래밍이 더 까다롭습니다. 그렇다면 차세대 C#이 우리에게 가져올 것이 무엇인지 살펴보겠습니다. (비동기 CTPVB도 지원합니다.)


이 글의 예시는 Async CTP SP1 Refresh를 기준으로 작성되었습니다. Async는 아직 CTP 단계이기 때문에 아직 많은 논의가 진행 중이니 까지 기다려주시면 될 것 같습니다. C# 5.0 출시 시 세부 사항이 변경됩니다. 그러나 일반적인 아이디어와 개념은 크게 바뀌어서는 안 됩니다.

본점으로 이동:

먼저 Async 기능을 사용해 보세요. Visual Studio 2010 SP1Microsoft 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
로그인 후 복사

 
private
 
void
 btnSync_Click(
object
 sender, 
EventArgs
 e)

                     {

                         lblResult.Text = 
"Start to do something . . ."
;

                         
long
 value = DoSomething(
int
.MaxValue / 2);

                         lblResult.Text = value.ToString();

                     }
로그인 후 복사
로그인 후 복사


<🎜><🎜>

然后,添加一个按钮的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的字样;第二行调用算法获得结果;第三行把结果输出。看似挺不算的。运行一下,就会发现有两个问题:

  1. 这个算法需要四五秒钟左右的实现时间,并且在这几秒钟的时间里,界面是锁死的,也就是说应用程序就像死了一样,它不接受任何用户操作。(也许我的电脑比较差,呵呵,所以,如果你没有遇到这种情况,请加大输入参数的值,让它算一会儿。)

  1. 我们没有看到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 애플리케이션 세트에 나타날 것으로 믿습니다.

두 번째: DoSomethingTask로 캡슐화합니다.

셋째: async, await 등의 키워드를 추가하세요.

코드를 자세히 살펴보겠습니다.

먼저 비동기적으로 실행될 코드의 반환 값을 작업. 이 반환 값에는 실제로 세 가지 옵션이 있습니다: void, TaskTask 자세한 사용법은 C#4.0MSDN에서 Task를 확인하세요. 수업.

그런 다음 Run에서 TaskEx 메서드를 호출하여 통과시켰습니다. 이는 long 값을 반환하는 메서드입니다. 이것이 우리 작업의 알고리즘입니다.

공부에 관심이 있다면 Run이 실제로 호출하는 과제를 살펴보세요. .Factory.StartNew, 이 Start는 먼저 Task를 빌드합니다. 그런 다음 Start 메서드가 호출됩니다...

알고리즘을 작업에 봉인하고 완료하세요.

코드의 두 번째 부분이 설명하기 더 쉽습니다.

첫 번째 줄은 Label; 두 번째 줄은 결과를 얻기 위해 알고리즘을 호출합니다. <--이 줄에 복사됨/이전 기사에서 붙여넣음:-)

헤헤 자세히 살펴보고

SyncAsync 코드:

동기화

비동기

        비공개 무효 btnSync_Click(개체 발신자, EventArgs e)
                    {
                        lblResult.Text = 
"뭔가를 시작하세요 . . .";
                        
long value = DoSomething(int.MaxValue / 2);
                        lblResult.Text = value.ToString();
                    }

        비공개 비동기 무효 btnAsync_Click(객체 발신자, EventArgs e)
                    {
                        lblResult.Text = 
"뭔가 시작하세요...";
                        
var x = 대기 DoSomethingAsync(int.MaxValue / 2);
                        lblResult.Text = x.ToString();
                    }

먼저 메서드 이름에 async를 추가하여 이것이 비동기 호출을 사용하는 메서드임을 선언합니다.

그런 다음 await 키워드를 반환하기 전에 함수 호출(DoSomethingAsync)을 추가합니다. x가 어떤 유형인지 추측해 볼까요? 정답은 형 입니다. await을 사용하면 설계 중에도 컴파일러가 자동으로 Task 유형을 으로 변환합니다. ㄷ형.

코드는 여기서 끝나는데, 새로운

Async

기능이 우리에게 가져다 주는 것은 무엇일까요? 비동기 프로그래밍의 능력인가? 콜백을 사용하여 비동기 작업을 수행할 수도 있으며 IAsyncCallback 인터페이스는 .NET 1.1에 있어야 합니다. 에서 구현되었습니다. 멀티 스레드 네임스페이스도 오랫동안 존재했습니다. TaskC# 4.0... 제 생각에는

Async

가 프로그래머들에게 로직 중심의 코드를 제공하는 것 같아요. 다중 구현 스레드 프로그래밍. 최종 비교를 통해 Async의 코드는 Sync의 코드와 거의 동일하며, 프로그램은 no 콜백, 동기화 등의 문제를 고려하십시오. 이는 C#이 무엇을 더 열심히 설명하는지에 대한 방향과 일치합니다. 어떻게 하느냐보다는 끝났다. 마지막으로 애플리케이션 다운로드 및 소스 코드와 실행 인터페이스 스크린샷을 첨부합니다... (알겠습니다. 저는 아티스트가 아닙니다. 양해해 주시기 바랍니다. 나:-)

)

소스 코드를 다운로드하려면 클릭

비동기

보기 실행 프롬프트로 이동:

실행 결과 표시:


최신 및 가장 공식적인 Async 정보는 여기에 있습니다: ^v^

http://msdn.microsoft.com/Async

위 내용은 C# 5.0 함수의 Async에 대한 자세한 그래픽 코드 설명을 한눈에 볼 수 있습니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C#을 사용한 Active Directory C#을 사용한 Active Directory Sep 03, 2024 pm 03:33 PM

C#을 사용한 Active Directory 가이드. 여기에서는 소개와 구문 및 예제와 함께 C#에서 Active Directory가 작동하는 방식에 대해 설명합니다.

C#의 난수 생성기 C#의 난수 생성기 Sep 03, 2024 pm 03:34 PM

C#의 난수 생성기 가이드입니다. 여기서는 난수 생성기의 작동 방식, 의사 난수 및 보안 숫자의 개념에 대해 설명합니다.

C# 직렬화 C# 직렬화 Sep 03, 2024 pm 03:30 PM

C# 직렬화 가이드. 여기에서는 C# 직렬화 개체의 소개, 단계, 작업 및 예제를 각각 논의합니다.

C# 데이터 그리드 보기 C# 데이터 그리드 보기 Sep 03, 2024 pm 03:32 PM

C# 데이터 그리드 뷰 가이드. 여기서는 SQL 데이터베이스 또는 Excel 파일에서 데이터 그리드 보기를 로드하고 내보내는 방법에 대한 예를 설명합니다.

C#의 소수 C#의 소수 Sep 03, 2024 pm 03:35 PM

C#의 소수 가이드. 여기서는 코드 구현과 함께 C#의 소수에 대한 소개와 예를 논의합니다.

C#의 패턴 C#의 패턴 Sep 03, 2024 pm 03:33 PM

C#의 패턴 가이드. 여기에서는 예제 및 코드 구현과 함께 C#의 패턴 소개 및 상위 3가지 유형에 대해 설명합니다.

C#의 팩토리얼 C#의 팩토리얼 Sep 03, 2024 pm 03:34 PM

C#의 팩토리얼 가이드입니다. 여기서는 다양한 예제 및 코드 구현과 함께 C#의 계승에 대한 소개를 논의합니다.

멀티 스레딩과 비동기 C#의 차이 멀티 스레딩과 비동기 C#의 차이 Apr 03, 2025 pm 02:57 PM

멀티 스레딩과 비동기식의 차이점은 멀티 스레딩이 동시에 여러 스레드를 실행하는 반면, 현재 스레드를 차단하지 않고 비동기식으로 작업을 수행한다는 것입니다. 멀티 스레딩은 컴퓨팅 집약적 인 작업에 사용되며 비동기식은 사용자 상호 작용에 사용됩니다. 멀티 스레딩의 장점은 컴퓨팅 성능을 향상시키는 것이지만 비동기의 장점은 UI 스레드를 차단하지 않는 것입니다. 멀티 스레딩 또는 비동기식을 선택하는 것은 작업의 특성에 따라 다릅니다. 계산 집약적 작업은 멀티 스레딩을 사용하고 외부 리소스와 상호 작용하고 UI 응답 성을 비동기식으로 유지 해야하는 작업을 사용합니다.

See all articles