c#비동기 프로그래밍
의 주요 차이점
비동기 프로그래밍에서는 응용 프로그램의 적용을 피하기 위해 UI 스레드 외부에서 작업을 수행해야합니다. 이것은 c#의 작업을 통해 달성 될 수 있습니다. 그러나 이상 및 기타 측면을 다룰 때 await Task.Run()
와 return Task.Run()
사이에는 미묘한 차이가 있습니다.
<.> 1. 처분 :
주요 차이점은 비정상적인 의사 소통입니다. 상황에서 :
비동기 작업의 이상은 작업을 기다리는 경우에만 콜백 메소드 만 확산됩니다. await Task.Run()
이것은 그들이 실수로 UI 스레드에 던지지 않도록 통제 된 방식으로 이상을 처리 할 수있게합니다. return Task.Run()
반대로, 에서 : .
작업 실행 중에 발생하는 이상은 즉시 호출 방법으로, 그리고 작업을 관찰하기 전에도 즉시 다시 던져집니다.
이것은 우발적 인 오류와 잠재적 교착 상태로 이어질 수 있습니다.
<.> 2. 동기 컨텍스트에 대한 의존성 :
또 다른 차이점은 버전이 스레드를 호출하는 동기화 컨텍스트에 따라 다릅니다. 작업이 완료되면 동일한 동기화 컨텍스트에서 실행됩니다. 이를 통해 UI 업데이트 (예 : 비활성화 버튼 활성화)가 올바른 스레드에서 발생합니다. await Task.Run()
반대로 버전은 동기화의 컨텍스트에 의존하지 않습니다. 기본 작업 스케줄링 프로그램의 배열을 계속하는데, 이는 스레드 호출의 동기화 컨텍스트와 다를 수 있습니다.
<.> 3. 생성 된 코드 :
두 가지 메소드에 의해 생성 된 코드는 약간 다릅니다. 의 경우, 비동기 실행을 관리하기 위해 비동기/대기 상태 머신이 생성됩니다. 이것은 보다 더 복잡한 코드로 이어집니다. -
코드 예 :
다음 코드 예제는 이러한 차이점을 보여줍니다
예 1 : -
예제 2 :
이 두 가지 예에서 "Dosomework ()"은 UI 스레드 외부에서 특정 작업을 수행하는 방법입니다. return Task.Run()
결론 :
및 의 선택은 응용 프로그램의 특정 요구에 따라 다릅니다. 비정상적인 보급을 제어하고 올바른 동기화 컨텍스트를 보장하는 것이 중요 할 때 를 사용하는 것이 좋습니다. 변칙을 퍼 뜨리거나 컨텍스트를 즉시 동기화하는 것이 문제가되지 않으면 - 가 적합합니다.
위 내용은 wask.run () vs. return task.run () : c# 비동기 프로그래밍의 주요 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!