찾다
백엔드 개발C#.Net 튜토리얼C#에서 비동기 및 대기 사용에 대한 자세한 설명

이 글에서는 주로 C#의 async 및 Wait의 구체적인 사용법을 소개합니다. 편집자는 이것이 꽤 좋다고 생각하므로 지금 공유하고 참고용으로 제공하겠습니다. 편집기를 따라가면서 Async 및 Wait가 C# 5.0에 도입되었는지 살펴보겠습니다. 이 두 키워드를 사용하면 비동기 코드를 더 쉽게 작성할 수 있습니다.


예를 보세요:

public class MyClass 
{ 
  public MyClass() 
  { 
    DisplayValue(); //这里不会阻塞 
    System.Diagnostics.Debug.WriteLine("MyClass() End."); 
  } 
  public Task<double> GetValueAsync(double num1, double num2) 
  { 
    return Task.Run(() => 
    { 
      for (int i = 0; i < 1000000; i++) 
      { 
        num1 = num1 / num2; 
      } 
      return num1; 
    }); 
  } 
  public async void DisplayValue() 
  { 
    double result = await GetValueAsync(1234.5, 1.01);//此处会开新线程处理GetValueAsync任务,然后方法马上返回 
    //这之后的所有代码都会被封装成委托,在GetValueAsync任务完成时调用 
    System.Diagnostics.Debug.WriteLine("Value is : " + result); 
  } 
}

위에서 async 키워드로 표시된 비동기 메서드 DisplayValue()는 MyClass의 생성자에서 호출됩니다. DisplayValue() 메서드는 다음으로 표시된 비동기 작업 GetValueAsync()를 실행합니다. wait 키워드), 이 비동기 작업은 반환 값으로 Task 또는 Task를 사용해야 하며, DisplayValue( ) 메소드 비동기 작업이 완료되면 모든 코드가 실행됩니다.


DisplayValue() 메소드에 의해 실제로 실행되는 코드는 다음과 같습니다.

public void DisplayValue() 
{ 
  System.Runtime.CompilerServices.TaskAwaiter<double> awaiter = GetValueAsync(1234.5, 1.01).GetAwaiter(); 
  awaiter.OnCompleted(() => 
    { 
      double result = awaiter.GetResult(); 
      System.Diagnostics.Debug.WriteLine("Value is : " + result); 
    }); 
}

보시다시피 async 및 wait 키워드는 위 코드를 더 간단하고 이해하기 쉽게 만듭니다.


프로그램의 출력은 다음과 같습니다.


MyClass() End.

값은 2.47032822920623E-322


다음은 제가 작성한 정적 클래스입니다. 이는 공통 함수의 비동기 호출을 용이하게 할 수 있습니다.

public static class TaskAsyncHelper 
{ 
  /// <summary> 
  /// 将一个方法function异步运行,在执行完毕时执行回调callback 
  /// </summary> 
  /// <param name="function">异步方法,该方法没有参数,返回类型必须是void</param> 
  /// <param name="callback">异步方法执行完毕时执行的回调方法,该方法没有参数,返回类型必须是void</param> 
  public static async void RunAsync(Action function, Action callback) 
  { 
    Func<System.Threading.Tasks.Task> taskFunc = () => 
    { 
      return System.Threading.Tasks.Task.Run(() => 
      { 
        function(); 
      }); 
    }; 
    await taskFunc(); 
    if (callback != null) 
      callback(); 
  } 
 
  /// <summary> 
  /// 将一个方法function异步运行,在执行完毕时执行回调callback 
  /// </summary> 
  /// <typeparam name="TResult">异步方法的返回类型</typeparam> 
  /// <param name="function">异步方法,该方法没有参数,返回类型必须是TResult</param> 
  /// <param name="callback">异步方法执行完毕时执行的回调方法,该方法参数为TResult,返回类型必须是void</param> 
  public static async void RunAsync<TResult>(Func<TResult> function, Action<TResult> callback) 
  { 
    Func<System.Threading.Tasks.Task<TResult>> taskFunc = ()=> 
      { 
        return System.Threading.Tasks.Task.Run(()=> 
          { 
            return function(); 
          }); 
      }; 
    TResult rlt = await taskFunc(); 
    if(callback != null) 
      callback(rlt); 
  } 
}

사용이 매우 간단합니다. 메서드 이름을 매개 변수로 전달하기만 하면 됩니다. 가장 일반적으로 사용되는 방법은 시간이 많이 걸리는 직렬화 함수를 전달하여 UI 프로세스를 차단하여 지연을 일으키고 사용자 경험에 영향을 미치는 것입니다. .

위 내용은 C#에서 비동기 및 대기 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
C# .net 언어 : 생태계의 기초C# .net 언어 : 생태계의 기초May 02, 2025 am 12:01 AM

C#은 2000 년 Microsoft가 발표 한 프로그래밍 언어로 C의 힘과 Java의 단순성을 결합하는 것을 목표로합니다. 1.C#은 캡슐화, 상속 및 다형성을 지원하는 유형 안전 객체 지향 프로그래밍 언어입니다. 2. C#의 컴파일 프로세스는 코드를 중간 언어 (IL)로 변환 한 다음 .NET 런타임 환경 (CLR)에서 기계 코드 실행으로 컴파일합니다. 3. C#의 기본 사용에는 가변 선언, 제어 흐름 및 기능 정의가 포함되며, 고급 사용법은 비동기 프로그래밍, LINQ 및 대표 등을 포함합니다. 5. 성능 최적화 제안에는 LINQ 사용, 비동기 프로그래밍 및 코드 가독성 향상이 포함됩니다.

C# vs. .NET : 주요 차이점과 유사성을 명확하게합니다C# vs. .NET : 주요 차이점과 유사성을 명확하게합니다May 01, 2025 am 12:12 AM

C#은 프로그래밍 언어이며 .NET은 소프트웨어 프레임 워크입니다. 1.C#은 Microsoft에 의해 개발되었으며 다중 플랫폼 개발에 적합합니다. 2..NET은 클래스 라이브러리 및 런타임 환경을 제공하며 다국어를 지원합니다. 두 사람은 현대적인 응용 프로그램을 구축하기 위해 함께 작동합니다.

과대 광고 : C# .net의 현재 역할 평가과대 광고 : C# .net의 현재 역할 평가Apr 30, 2025 am 12:06 AM

C# .NET은 C# 언어 및 .NET 프레임 워크의 장점을 결합한 강력한 개발 플랫폼입니다. 1) 엔터프라이즈 애플리케이션, 웹 개발, 게임 개발 및 모바일 애플리케이션 개발에 널리 사용됩니다. 2) C# 코드는 중간 언어로 컴파일되며 .NET 런타임 환경에서 실행되며 쓰레기 수집, 유형 안전 및 LINQ 쿼리를 지원합니다. 3) 사용의 예로는 기본 콘솔 출력 및 고급 LINQ 쿼리가 포함됩니다. 4) 빈 참조 및 유형 변환 오류와 같은 일반적인 오류는 디버거 및 로깅을 통해 해결할 수 있습니다. 5) 성능 최적화 제안에는 비동기 프로그래밍 및 LINQ 쿼리 최적화가 포함됩니다. 6) 경쟁에도 불구하고 C#.net은 지속적인 혁신을 통해 중요한 위치를 유지합니다.

C# .net의 미래 : 트렌드와 기회C# .net의 미래 : 트렌드와 기회Apr 29, 2025 am 12:02 AM

C#.NET의 미래 트렌드는 주로 클라우드 컴퓨팅, 마이크로 서비스, AI 및 기계 학습 통합, 크로스 플랫폼 개발의 세 가지 측면에 중점을 둡니다. 1) 클라우드 컴퓨팅 및 마이크로 서비스 : C#.net은 Azure 플랫폼을 통해 클라우드 환경 성능을 최적화하고 효율적인 마이크로 서비스 아키텍처의 구성을 지원합니다. 2) AI 및 기계 학습의 통합 : ML.NET 라이브러리의 도움으로 C# 개발자는 기계 학습 모델을 응용 프로그램에 포함시켜 지능형 애플리케이션의 개발을 촉진 할 수 있습니다. 3) 크로스 플랫폼 개발 : .NETCORE 및 .NET5를 통해 C# 응용 프로그램은 Windows, Linux 및 MacOS에서 실행되어 배포 범위를 확장 할 수 있습니다.

C# .NET 개발 오늘 : 트렌드 및 모범 사례C# .NET 개발 오늘 : 트렌드 및 모범 사례Apr 28, 2025 am 12:25 AM

C#.NET 개발의 최신 개발 및 모범 사례에는 다음이 포함됩니다. 1. 비동기 프로그래밍은 응용 프로그램 응답 성을 향상시키고 Async 및 Await 키워드를 사용하여 비 차단 코드를 단순화합니다. 2. LINQ는 지연된 실행 및 표현 트리를 통해 데이터를 효율적으로 조작하는 강력한 쿼리 기능을 제공합니다. 3. 성능 최적화 제안에는 비동기 프로그래밍 사용, LINQ 쿼리 최적화, 합리적으로 메모리 관리, 코드 가독성 및 유지 보수 개선 및 단위 테스트 작성이 포함됩니다.

C# .NET : .NET 생태계로 응용 프로그램을 구축합니다C# .NET : .NET 생태계로 응용 프로그램을 구축합니다Apr 27, 2025 am 12:12 AM

.NET을 사용하여 응용 프로그램을 구축하는 방법? .NET을 사용하여 응용 프로그램 빌드 응용 프로그램은 다음 단계를 통해 달성 할 수 있습니다. 1) C# 언어 및 크로스 플랫폼 개발 지원을 포함한 .NET의 기본 사항을 이해합니다. 2) .NET 생태계의 구성 요소 및 작동 원리와 같은 핵심 개념을 배우십시오. 3) 간단한 콘솔 애플리케이션에서 복잡한 WebApis 및 데이터베이스 운영에 이르기까지 기본 및 고급 사용을 마스터합니다. 4) 구성 및 데이터베이스 연결 문제와 같은 일반적인 오류 및 디버깅 기술에 익숙해야합니다. 5) 응용 프로그램 성능 최적화 및 비동기 프로그래밍 및 캐싱과 같은 모범 사례.

다양한 .NET 언어로서 C# : 응용 프로그램 및 예제다양한 .NET 언어로서 C# : 응용 프로그램 및 예제Apr 26, 2025 am 12:26 AM

C#은 엔터프라이즈 레벨 애플리케이션, 게임 개발, 모바일 응용 프로그램 및 웹 개발에서 널리 사용됩니다. 1) 엔터프라이즈 레벨 애플리케이션에서 C#은 종종 asp.netcore가 webapi를 개발하는 데 사용됩니다. 2) 게임 개발에서 C#은 Unity 엔진과 결합되어 역할 제어 및 기타 기능을 실현합니다. 3) C#은 코드 유연성 및 응용 프로그램 성능을 향상시키기 위해 다형성 및 비동기 프로그래밍을 지원합니다.

웹, 데스크탑 및 모바일 개발 용 C# .net웹, 데스크탑 및 모바일 개발 용 C# .netApr 25, 2025 am 12:01 AM

C# 및 .NET은 웹, 데스크탑 및 모바일 개발에 적합합니다. 1) 웹 개발에서 ASP.NETCORE는 크로스 플랫폼 개발을 지원합니다. 2) 데스크탑 개발은 WPF 및 Winforms를 사용하여 다양한 요구에 적합합니다. 3) 모바일 개발은 Xamarin을 통한 크로스 플랫폼 응용 프로그램을 실현합니다.

See all articles

핫 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 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.