백그라운드 워커 vs. 비동기 / 기다리기


16

저는 C # 개발에 익숙하지 않아보다 반응이 빠른 UI를 만들고 싶습니다. 예비 연구에서 나는 이것을 달성하는 두 가지 방법을 보았습니다.

  1. BackgroundWorker 클래스와 함께 멀티 스레딩.
  2. 최신 Async / Await 수정 자

새로운 것이 더 나을까요? 두 방법의 차이점은 무엇입니까? 새 프로젝트를 만들려면 어떤 방법을 선택해야합니까?

편집 : 어쩌면 내가 지정해야합니다. 필요한 모든 데이터가 로컬 디스크에 저장 /로드되는 Windows Forms 응용 프로그램을 만들고 있습니다. 또한 여러 USB 장치와 통신 할 것입니다.


답변:


10

을 사용하여 작업을 수행 할 수 있습니다 BackgroundWorker. 그것은 잘 알려진 수업이며 많은 사람들이 그것을 사용했습니다.

새로운 C # 5 asyncawait키워드는 기본적으로 읽기 쉬운 비동기 코드를 작성하기가 더 쉽습니다. 키워드가 아닌 이러한 키워드로 다양한 작업을 수행하는 방법에 대한 자습서와 예제가 더 적을 수 있습니다 BackgroundWorker.

이전 버전의 C #을 사용해야하는 경우가 아니라면 async및 사용법을 익히는 것이 좋습니다 await.


13

asyncawait키워드는 자신의 응용 프로그램이 더 반응하지 않습니다. Task객체를 더 편리하게 반환하는 메서드를 호출하고 처리하기 만하면 됩니다. 백그라운드 스레드 를 만들 async거나 await실제로 사용하려면 다음과 같은 사용법과 결합해야합니다.

  • Task.Start()-을 사용하여 주어진 작업을 시작합니다 TaskScheduler.
  • PLINQ-일련의 작업을 병렬로 실행하고 작업을 반환합니다.
  • TaskCompletionSource-비동기 작업을 처리하는 사용자 정의 방법. 내가 이것을 사용한 한 곳은 WebBrowser컨트롤 에서 오는 이벤트를 처리하는 것이 었습니다 .
  • asyncWin 8 API의 많은 기능과 같은 다른 방법.

즉, async/ await작업 기반 비동기 패턴 의 확장입니다 . 여기에서 많은 샘플을 포함하여 많은 정보를 찾을 수 있습니다 .

BackgroundWorker사용하여 1 개 백그라운드 스레드 생성하는 윈폼 구성 요소입니다 이벤트 기반 비동기 패턴을 , 당신은 당신의 자신의 코드와 함께이 백그라운드 스레드에서 수행 된 작업 채울 수 있습니다 DoWork이벤트 핸들러를. 일반적으로 Microsoft는 더 이상이 패턴을 사용하지 않는 것이 좋습니다 ( 여기 페이지 하단 참조 ). 이미 익숙한 경우 여전히 간단한 옵션 일 수 있습니다.

언급되지 않은 또 다른 옵션 은 .NET 용 Reactive Extensions입니다 . 앱에 응답 성을 추가하기위한 또 다른 훌륭한 프레임 워크입니다.


Win 8 API를 말할 때 Windows 7 (내 대상 플랫폼)에서 비동기 기능이 제대로 지원되지 않는다는 의미입니까?
robert.ecot

1
안녕하세요. 비동기를 사용하는 Win 8 .NET API ( "메트로"스타일 앱용)는 파일 I / O에서 대화 상자 표시에 이르기까지 모든 것을 기다리고 있습니다. FileStream과 같은 다른 .NET 구성 요소에서는 Stream.ReadAsync와 같은 메서드와 함께 async / await를 사용할 수도 있습니다. 따라서 Win 8 이외의 지원도 있습니다.
케빈 맥코믹

위대하고 업데이트 된 링크에 감사드립니다! 매우 도움이됩니다.
robert.ecot

1
해당 페이지에 BackgroundWorker, 특히 권장 되는 내용이 없습니다 .
Kyralessa

또한 O'Reilly가 발행 한이 전조의 저자 인 Stephen Clearly의 C #에서 동시 프로그래밍에 대한 Async VS BackgroundWorker일련의 블로그 게시물을 읽는 것이 좋습니다 .
sentenza

3

나는 말 것 async- await보다 훨씬 더 유연하다 BackgroundWorker. 그리고 당신은 맞는 그 무언가하고 싶은 경우에 BackgroundWorker, 당신이 그것을 할 수 있습니다 async- await더 읽기 더 많은 유형의 안전 코드도 있습니다.

그 때문에, 나는 당신이 사용을 선호한다고 생각 async- await이상 BackgroundWorker.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.