web-dev-qa-db-ja.com

.net 4でasync-awaitを使用する

現在、C#5のasync-await機能から多くの利益を得られるアプリケーションを作成し始めています。しかし、どのバージョンのVSと非同期ランタイムを使用するのかわかりません。

OSの人気チャートを見ると、Windows XPをさらに3年ほどサポートする必要があります。 .net 4.5はWindowsの新しいバージョンでのみ実行されるように見えるため、.net 4.0をターゲットにする必要があります。開発マシンはWindows 7を使用しているため、VSの新しいバージョンを使用しても問題はありません。

今、私はこれを行うために最初にコンパイラを選択する必要があります:

  • AsyncCTPを使用したVS2010
  • VS2012 Preview(および到着したら最終)、ターゲットを.net 4.0に設定
  • Mono(2.12のように見えるのはasync-awaitで、IDEとしてMonoDevelopよりもVSを好む/好む)

コード生成バグが少ないのはどれですか? Jon Skeetのブログ を見ると、VS2012プレビューはCTPよりも決してコードジェネレーターを使用していません。

そしてさらに重要なのは、どのランタイムを使用するか?

VS2012には、.net 4で使用するための再配布可能な非同期ランタイムが含まれていますか?

AsyncCTPランタイムを参照して、プレビューでコードをコンパイルできました。しかし、CTPには奇妙なライセンス条件があるため、長期的なソリューションとしては適していません。

または、サードパーティの実装を使用する必要がありますか?おそらくモノには1つありますか?

ライブラリを配布するには、何らかの種類のインストーラーではなく、アプリケーションと同じディレクトリにdllを置くだけです。

また、mono + Linux/MacOSでバイナリを変更せずに動作する場合にも、それが欲しいです。そのため、ランタイムは、モノ(2.12おそらく)が組み込まれているものと互換性があるか、Windows以外のOSでの使用を許可する必要があります。

137
CodesInChaos

Microsoftは、AsyncCTPの代替として Async Targeting Pack(Microsoft.Bcl.Async) through Nuget をリリースしました。

詳しくはこちらをご覧ください: 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 + asyncをターゲットにする最適なオプションは、Visual Studio 2012 + C#5 + Async Targeting Packを使用することだと思います。

ただし、.NET 3.5をターゲットにする必要がある場合は、(my) AsyncBridge for .NET 3.5 を引き続き使用できます。

106
Omer Mor

他の.Net言語を検討する場合は、F#で問題を解決できます。何年もの間async {}計算式を使用しており、.Net 2.0でも下位互換性があります。最小要件はWindows XP SP3です。ランタイムはダウンロードできます ここ

24
Marc Sigrist

ソフトウェアを配布できるようにしたい場合は、Monoソリューションが今のところ本当に唯一の選択肢であると思います。また、最終結果をLinuxおよびOS X上のMonoで実行したいということもあります。Monoを最初にターゲットにするのは自然な解決策のようです。

次の問題はIDEです。 MonoDevelopは明らかにうまく機能しますが、Visual Studioを好むと言います。

Greg Hurlman プロファイルの作成 Visual StudioからMono 2.8に対してコードを作成します。彼と一緒にフォローアップすると、彼はVisual StudioでMono 2.11/2.12に対して開発するための正しい方向を示すことができるかもしれません。

もちろん、 Mono Tools for Visual Studio もあります。これは商用製品です。 Xamarin でまだ提供されていると思います。

また、必要な4.5プロファイルアセンブリを.NETの上のMonoから実行できるかもしれませんが、私は試していません。 4.5プロファイルは、4.0 APIの厳密なスーパーセットです。おそらくそれを試して報告してください。

編集:おそらく現在、実稼働環境でVisual Studio非同期CTPを使用できるようです

ダウンロードページ の内容は次のとおりです。

実稼働用の新しいEULAが含まれています。注-このライセンスは、生産コードにCTPを使用することを奨励するものではありません。 CTPは、サポートされておらず、ご自身のリスクで使用するテクノロジープレビューのままです。ただし、開発者から本番コードにCTPを使用するよう多くのリクエストを受け取ったため、それを許可するようにライセンスを変更しました。

3
Justin

VS 12ベータ版を使用して、async/awaitを使用して.NET 4.0をターゲットにすることができます。

コンパイラが依存する型を提供するコードをプロジェクトにコピーする必要があります。

詳細 ここ

編集:この手法を採用し、AsyncBridgeと呼ばれるオープンソースライブラリに変換しました。 https://nuget.org/packages/AsyncBridge

3
Alex Davies

MSがC#5.0をリリースした後にソフトウェアの配布を開始する場合は、AsycnCTPを使用して開発を開始できます。それ以外の場合は、ベータ版ではなく単なるCTPであるため、使用することはお勧めしません。これは、ベータ段階とリリースの近くで大幅に変更できます。不安定などです。

アプリケーションに簡単な非同期操作を導入したい場合は、Reactive Extensionsとその上に構築されたもの(Reactive UIなど)を使用することをお勧めします。

VS2012に関しては、MSがその会議で私にくれた// Build /タブレットから覚えている限り、同じ非同期CTPも含まれています。

2
Alexey Raga