.net 4에서 async-await 사용


137

현재 C # 5의 async-await 기능에서 많은 이익을 얻을 수있는 응용 프로그램을 만들기 시작했습니다. 그러나 어떤 버전의 VS와 비동기 런타임을 사용할지 잘 모르겠습니다.

OS 인기 차트를 살펴보면 3 년 정도 더 Windows XP를 지원해야합니다. .net 4.5는 최신 버전의 Windows에서만 실행되는 것처럼 보이므로 .net 4.0을 대상으로해야합니다. 개발 시스템은 Windows 7을 사용하므로 최신 버전의 VS를 사용하는 것은 문제가되지 않습니다.

이제이 작업을 수행하기 위해 먼저 컴파일러를 선택해야합니다.

  • AsyncCTP가있는 VS2010
  • 대상을 .net 4.0으로 설정하는 VS2012 미리보기 (그리고 도착하면 최종)
  • 모노

어느 코드 생성 버그가 적은 것입니까? 보면 존 소총의 블로그 VS2012 미리보기는 CTP보다 결코 코드 생성기를 사용합니다.

더 중요한 것은 어떤 런타임을 사용해야합니까?

VS2012에 .net 4와 함께 사용할 재배포 가능 비동기 런타임이 포함되어 있습니까?

AsyncCTP 런타임을 참조하여 미리보기로 코드를 컴파일했습니다. 그러나 CTP는 라이센스 조건이 이상하므로 장기적인 솔루션으로는 적합하지 않습니다.

아니면 타사 구현을 사용해야합니까? 아마도 모노가 있습니까?

라이브러리를 배포하려면 dll을 응용 프로그램과 같은 디렉토리에 설치하는 것이 좋습니다.

바이너리가 mono + Linux / MacOS에서 변경없이 작동한다면 좋을 것입니다. 따라서 런타임은 내장 된 모노 (2.12)와 호환되거나 비 Windows OS에서 사용할 수 있어야합니다.


1
상용 응용 프로그램과 함께 CTP의 일부를 재배포 할 수 없으므로 CTP 버전을 사용하지 않을 것이라고 생각합니다. 분명히 버그가 숨겨져 있으며 아직 성능에 최적화되지 않았습니다. 개발 속도는 더 빨라지지만 고객은 최종 출시 버전을 방해 할 수있는 베타 소프트웨어를 설치하는 것을 좋아하지 않을 것입니다.
Alois Kraus

@Alois 최신 버전의 AsyncCTP는 재배포를 허용합니다. 그리고 일어날 수있는 최악의 일은 내 응용 프로그램이 중단된다는 것입니다. 다른 응용 프로그램을 방해 할 수있는 것은 아니므로 최종 버전과의 간섭에 대한 콘서트를 이해하지 못합니다. 또한 내 질문의 일부는 WinXP를 지원하는 최종 버전이 처음에 있는지 여부입니다.
코드 InChaos

1
라이선스에는 (Async CTP 3) "1.a.ii. Microsoft의 통지가있을 경우 즉시 그러한 사용을 중단하기로 동의합니다."라고 명시되어 있습니다. 이 알림은 MS가 릴리스 될 때 MS에서 올 것으로 생각합니다. 저는 변호사는 아니지만 법무 부서 (있는 경우)는 라이센스 조건을 위반하지 않고이 문제를 해결하려는 이유를 듣고 싶어합니다.
Alois Kraus

답변:


106

Microsoft는 Nuget 을 통해 AsyncCTP 를 대신 하여 Async Targeting Pack (Microsoft.Bcl.Async)출시 했습니다.

자세한 내용은 http://blogs.msdn.com/b/bclteam/archive/2013/04/17/microsoft-bcl-async-is-now-stable.aspx 에서 확인할 수 있습니다 .

http://blogs.msdn.com/b/lucian/archive/2012/04/24/async-targeting-pack.aspx 에서 이전 버전에 대해 읽을 수 있습니다 .

이 팩은 공식적으로 지원되므로 XP + 비동기를 타겟팅하는 가장 좋은 옵션은 Visual Studio 2012 + C # 5 + Async Targeting Pack을 사용하는 것입니다.

그래도 .NET 3.5를 타겟팅해야한다고 생각하면 .NET 3.5 용 (my) AsyncBridge를 계속 사용할 수 있습니다 .


AsyncBridge의 라이센스에 대한 참조를 찾을 수 없습니까?
toong


15
.NET 4.0에서 비동기 타겟팅 팩을 사용하려면 KB2468871이 설치되어 있어야합니다.
ghord

- KB2468871이 (6 개월 후 V2가 출시되었습니다) 년 6 월 2011 년 출시 된, 그러나 여전히 설치되지 않을 수 있습니다, 그래서 윅스에서 그것을 확인하는 방법을 참조 stackoverflow.com/a/9506530/968003을 .
Alex Klaus

24

다른 .Net 언어를 고려할 수 있다면 F #로 문제를 해결할 수 있습니다. 수년 동안 async {} 계산 식을 사용했으며 .Net 2.0 과도 호환됩니다. 최소 요구 사항은 Windows XP SP3입니다. 런타임은 여기에서 다운로드 할 수 있습니다 .


4

VS 12 베타를 사용하여 async / await를 사용하여 .NET 4.0을 대상으로 지정할 수 있습니다.

컴파일러가 의존하는 유형을 제공하는 일부 코드를 프로젝트에 복사해야합니다.

자세한 내용은 여기

편집 : 우리는이 기술을 가져 와서 AsyncBridge라는 오픈 소스 라이브러리로 바꿨습니다 : https://nuget.org/packages/AsyncBridge


3

소프트웨어를 배포하려면 현재 Mono 솔루션이 유일한 옵션이라고 생각합니다. 또한 최종 결과는 Linux 및 OS X에서 Mono에서 실행되기를 원한다고 말합니다. Mono를 타겟팅하는 것은 자연스러운 솔루션처럼 보입니다.

다음 문제는 IDE입니다. MonoDevelop는 분명히 잘 작동하지만 Visual Studio를 선호한다고 말합니다.

Greg Hurlman 은 Visual Studio에서 Mono 2.8을 코딩하기 위한 프로필만들었습니다 . 그와 함께 후속 조치를 취하면 Visual Studio에서 Mono 2.11 / 2.12를 개발하기위한 올바른 방향을 제시 할 수 있습니다.

물론 상용 제품인 Visual Studio 용 Mono Tools 도 있습니다. 나는 그것이 여전히 Xamarin에 의해 제공되고 있다고 가정합니다 .

.NET 위에서 Mono에서 필요한 4.5 프로필 어셈블리를 실행할 수도 있지만 시도하지는 않았습니다. 4.5 프로필은 4.0 API의 엄격한 상위 집합입니다. 아마도 그것을 쏴서 다시보고하십시오.

편집 : 아마도 프로덕션 환경에서 Visual Studio Async CTP를 사용할 수있는 것 같습니다.

다운로드 페이지에 다음 과 같이 나와 있습니다 .

프로덕션 사용을위한 새로운 EULA가 포함됩니다. 참고-이 라이센스는 프로덕션 코드에 CTP를 사용하도록 권장하지 않습니다. CTP는 지원되지 않고 위험에 처한 기술 프리뷰로 남아 있습니다. 그러나 개발자로부터 CTP를 사용하여 프로덕션 코드에 대한 많은 요청을 받았으므로이를 허용하도록 라이센스를 변경했습니다.


내가 개발에 사용하는 것은 사소한 문제입니다. 가장 큰 문제는 WinXP 사용자에게 전달해야 할 문제입니다. 내 응용 프로그램과 함께 번들 모노 2.12를 제안합니까?
CodesInChaos

어제 나는 모노 소스를 조사했고, 적어도 몇 개의 핵심 비동기 클래스 ( Async...Builder...Awaiter)는 나머지 모노와 분리하기가 매우 어렵다. 현재 나는 다시 구현 AsyncCtpLibrary하고 모노에서 약간 빌릴 수 있습니다.
코드 InChaos

재배포시 AsyncCtpLibrary원칙적으로 가능하지만 라이센스에는 몇 가지 이상한 조항이 포함되어 있습니다. 그러나 여기서 가장 큰 문제는 장기적으로 일어나는 일입니다. 지원되지 않고 버그를 수정 한 사람이 없다면 성 가실 수 있습니다.
코드 InChaos

2

MS가 C # 5.0을 릴리스 한 후 소프트웨어 배포를 시작하려면 AsycnCTP를 사용하여 개발을 시작할 수 있습니다. 그렇지 않으면 베타 버전이 아니라 CTP이므로 사용하지 않는 것이 좋습니다. 베타 단계와 릴리스에 가깝게 변경할 수 있습니다. 불안정 할 수 있습니다.

응용 프로그램에서 쉬운 비동기 작업을 도입하려면 Reactive Extensions 및 맨 위에 구축 된 항목 (Reactive UI 등)을 사용하는 것이 좋습니다.

VS2012의 경우 // Build / tablet MS가 해당 회의에서 나에게 준 것과 동일한 비동기 CTP도 포함합니다.


1
VS2012 릴리스를 기다리는 것에 신경 쓰지 않습니다. 내 소프트웨어가 알파가되기 전에 VS2012가 릴리스 될 것으로 기대합니다. 그러나 VS2012가 릴리스 된 후에도 .net 4.5를 대상으로하고 싶지 않습니다 .WinXP에서는 사용할 수없는 것 같습니다. 따라서 주요 이슈는 .net 4에서 사용할 비동기 런타임입니다.
CodesInChaos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.