1. ホーム
  2. c#

[解決済み] .net 4でasync-awaitを使用する。

2022-06-08 08:22:33

質問

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

OSの普及率表を見ると、あと3年ぐらいはWindows XPをサポートする必要がありそうです。.net 4.5 は Windows の新しいバージョンでのみ動作するようなので、.net 4.0 をターゲットとする必要があります。開発マシンはWindows 7を使用しているので、VSの新しいバージョンを使用することは問題ありません。

さて、私はまずこれを行うためのコンパイラを選択する必要があります。

  • VS2010 と AsyncCTP
  • VS2012 プレビュー (および到着後の最終版)、ターゲットを .net 4.0 に設定
  • Mono (2.12 には非同期待ちがあるようです。私は IDE として MonoDevelop よりも VS を好みます/慣れています)

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

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

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

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

あるいは、サードパーティの実装を使用すべきでしょうか?おそらく mono にはそれがあるのではないでしょうか。

ライブラリを配布するために、私は何らかのインストーラの代わりに、単にアプリケーションと同じディレクトリにDLLを置くことを好みます。

また、私のバイナリが mono+Linux/MacOS 上で変更なく動作することが望ましいと思います。したがって、ランタイムは、mono (2.12 おそらく) が内蔵しているものと互換性があるか、または非 Windows OS 上で使用できるようにする必要があります。

どのように解決するのですか?

マイクロソフトがリリースした 非同期ターゲット パック (Microsoft.Bcl.Async) を通して ナゲット を通して、AsyncCTPの代わりとして使用することができます。

詳しくはこちらで紹介しています。 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 をターゲットにする必要性を感じる場合は、(私の) .NET 3.5 用の AsyncBridge .