次のコードは、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>
TSource
int
- ラムダを非同期にし、を取得し
int
て返すと、int
が生成されます。Task<int>
これは、あるTResult
べきものです。
ここでは構文の問題は見られません。何が問題ですか?
メインアプリケーションにはAzureツールが必要なため、VS11はまだ使用できないことに注意してください。
編集:これmsbuild
はコマンドラインでは正常に機能しますが、VS2010では機能しません。コマンドラインでは、.NET 4.0をターゲットにしているにもかかわらず、VS11コンパイラが使用されているようですが、VS2010は独自のインプロセスコンパイラを使用しています。VS2010が使用するコンパイラを交換する方法を知っている人はいますか?