137

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

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

次に、これを行うためのコンパイラを最初に選択する必要があります。

  • AsyncCTP を使用した VS2010
  • VS2012 プレビュー (および到着したら最終版)、ターゲットを .net 4.0 に設定
  • Mono (2.12 には async-await があるようです。IDE として MonoDevelop よりも VS を好む/慣れています)

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

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

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

AsyncCTP ランタイムを参照することで、プレビューを使用してコードをコンパイルすることができました。しかし、CTP には奇妙なライセンス条件があるため、これは長期的な解決策とは思えません。

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

ライブラリを配布するには、何らかのインストーラーではなく、単純に dll をアプリケーションと同じディレクトリに配置することを好みます。

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

4

5 に答える 5

106

Microsoft は、AsyncCTP の代わりとしてNugetを通じて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 + async をターゲットとする最適なオプションは、Visual Studio 2012 + C#5 + Async Targeting Pack を使用することだと考えています。

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

于 2012-04-27T04:14:09.717 に答える
24

他の .Net 言語を検討することに前向きであれば、F# で問題を解決できます。何年も前から async{} 計算式があり、.Net 2.0 との下位互換性もあります。最小要件は Windows XP SP3 です。ランタイムはここからダウンロードできます。

于 2012-03-26T14:55:49.713 に答える
4

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

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

詳細はこちら

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

于 2012-04-09T10:40:04.623 に答える
3

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

次の問題はIDEです。MonoDevelopは明らかにうまく機能しますが、VisualStudioを好むとおっしゃっています。

Greg Hurlmanは、VisualStudioのMono2.8に対してコーディングするプロファイルを作成しました。彼をフォローアップすると、VisualStudioでMono2.11/2.12に対して開発するための正しい方向を示すことができる場合があります。

もちろん、商用製品であるVisualStudio用のMonoToolsもあります。Xamarinによってまだ提供されていると思います。

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

編集:おそらく、Visual StudioAsyncCTPを本番環境で使用できるようです

ダウンロードページに表示される内容は次のとおりです。

本番用の新しいEULAが含まれています。注-このライセンスは、製品コードにCTPを使用することを推奨するものではありません。CTPは、サポートされておらず、リスクに応じて使用できるテクノロジープレビューのままです。ただし、開発者から本番コードにCTPを使用するようにという多くのリクエストが寄せられたため、ライセンスを変更してそれを許可しました。

于 2012-02-08T07:59:28.553 に答える
2

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

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

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

于 2012-02-06T11:09:36.450 に答える