Projektion mit asynchronem Delegaten / Lambda
Der folgende Code wird nicht mit Async CTP in Visual Studio 2010 kompiliert:
Enumerable.Range(1, 5).Select(async x =>
{
await TaskEx.Delay(100);
return 5;
});
Der Kompilierungsfehler ist wie folgt:
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>'
Nach meiner Lektüre sollte hier jedoch Folgendes geschehen:
Die ÜberlastungIEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)
sollte benutzt werden.Als die.Range(1, 5)
istIEnumerable<int>
, TSource
istint
Das Lambda asynchron machen und eineint
und zurückint
sollte eineTask<int>
, welches ist wasTResult
sollte sein.Ich sehe hier kein Syntaxproblem. Worin besteht das Problem?
Beachten Sie, dass ich VS11 noch nicht verwenden kann, da für meine Hauptanwendung Azure-Tools erforderlich sind.
BEARBEITEN: Das funktioniert gut mitmsbuild
in der Befehlszeile, aber nicht in VS2010. An der Befehlszeile wird anscheinend der VS11-Compiler verwendet, obwohl ich auf .NET 4.0 abstelle, während VS2010 seinen eigenen In-Process-Compiler verwendet. Weiß jemand, wie man den Compiler austauscht, den VS2010 verwendet?