.net 4でのasync-awaitの使用


137

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

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

これを行うには、まずコンパイラを選択する必要があります。

  • VS2010とAsyncCTP
  • VS2012プレビュー(および最終的に到着)、ターゲットを.net 4.0に設定
  • Mono(2.12はasync-awaitがあるように見えますが、IDEとしてMonoDevelopよりもVSを使用するのが好きです)

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

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

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

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

または、サードパーティの実装を使用する必要がありますか?たぶん、monoには1つありますか?

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

また、mono + Linux / MacOSで変更を加えなくてもバイナリが機能するようにしたいのですが。したがって、ランタイムは組み込みのモノ(おそらく2.12)と互換性があるか、非Windows OSでの使用を許可する必要があります。


1
商用アプリケーションでCTPの一部であるものを再配布することは許可されないので、CTPバージョンで遠くまで行くことはないと思います。確かにバグが潜んでおり、パフォーマンスのためにまだ最適化されていません。あなたはおそらくそれをより速く開発するでしょうが、あなたの顧客は最終的にリリースされたバージョンを妨害するかもしれないベータソフトウェアをインストールすることに満足しません。
アロイスクラウス

@Alois AsyncCTPの新しいバージョンでは、再配布が可能です。そして、起こりうる最悪の事態は、アプリケーションの中断です。他のアプリケーションを妨害するようなものではないので、最終バージョンとの干渉をめぐってあなたのコンサートを理解できません。また、私の質問の一部は、そもそもWinXPをサポートする最終バージョンがあるかどうかです。
CodesInChaos

1
ライセンスには、(Async CTP 3)「1.a.ii。マイクロソフトからの通知に応じてそのような使用を直ちに停止することに同意する」と明記されています。この通知は、リリースされたときにMSから送信されるものと思われます。私は弁護士ではありませんが、法務部門(もしあれば)は、ライセンス条項に違反せずにこれを回避する方法についての根拠を聞きたいと思います。
アロイスクラウス

回答:


106

マイクロソフトは、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 +非同期をターゲットにするための最良のオプションは、Visual Studio 2012 + C#5 +非同期ターゲットパックを使用することだと思います。

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


AsyncBridgeのライセンスへの参照が見つかりませんか?
toong


15
.NET 4.0で非同期ターゲティングパックを使用するには、KB2468871をインストールする必要があることに注意してください。
ghord 2013

KB2468871は2011年6月にリリースされました(6か月後にv2がリリースされました)が、まだインストールされていない可能性があるため、WiXで確認する方法を参照してください-stackoverflow.com/a/9506530/968003
Alex Klaus

24

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


4

async / awaitを使用して.NET 4.0をターゲットにするためにVS 12ベータを使用することが可能です。

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

細部 こちら

編集:この手法を採用して、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ます。おそらくモノから借用しています。
CodesInChaos

の再配布AsyncCtpLibraryについては、原則として可能であることがわかっていますが、ライセンスにはいくつかの奇妙な条項が含まれています。しかし、ここでの私の主な問題は、長期的に何が起こるかです。それがサポートされなくなり、だれもそのバグを修正しなければ、それは煩わしいかもしれません。
CodesInChaos

2

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

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

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


1
VS2012のリリースを待つ必要はありません。ソフトウェアがアルファ版でなくなる前にVS2012がリリースされることを期待しています。しかし、VS2012がリリースされた後でも、.net 4.5をターゲットにしたくありません。WinXPでは使用できないようです。主な問題は、.NET 4に使用する非同期実行されるように
CodesInChaos
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.