1

次のコードは、VisualStudio2010の非同期CTPに対してコンパイルされません。

Enumerable.Range(1, 5).Select(async x =>
{
    await TaskEx.Delay(100);
    return 5;
});

コンパイルエラーは次のとおりです。

Test.cs(40,13): error CS1928: 'System.Collections.Generic.IEnumerable<int>' does not contain a definition for 'Select' and the best extension method overload 'System.Linq.Enumerable.Select<TSource,TResult>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,TResult>)' has some invalid arguments
Test.cs(40,49): error CS1503: Argument 2: cannot convert from 'lambda expression' to 'System.Func<int,int>'

ただし、私の読みでは、ここで次のことが発生するはずです。

  • 過負荷IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)を使用する必要があります。
  • そのまま、.Range(1, 5)です_IEnumerable<int>TSourceint
  • ラムダを非同期にし、を取得しintて返すと、intが生成されます。Task<int>これは、あるTResultべきものです。

ここでは構文の問題は見られません。何が問題ですか?

メインアプリケーションにはAzureツールが必要なため、VS11はまだ使用できないことに注意してください。

編集:これmsbuildはコマンドラインでは正常に機能しますが、VS2010では機能しません。コマンドラインでは、.NET 4.0をターゲットにしているにもかかわらず、VS11コンパイラが使用されているようですが、VS2010は独自のインプロセスコンパイラを使用しています。VS2010が使用するコンパイラを交換する方法を知っている人はいますか?

4

1 に答える 1

2

私のLINQPadで動作します(マシンにインストールされているVS11ベータ版)

ここに画像の説明を入力してください

于 2012-05-23T03:02:39.537 に答える