使用async delegate / lambda进行投影

时间:2012-05-23 02:20:18

标签: c# async-ctp async-await c#-5.0

以下代码无法针对Visual Studio 2010中的Async 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
  • 使lambda异步,取int并返回int应生成Task<int>,这应该是TResult

我在这里看不到语法问题。有什么问题?

请注意,我还不能使用VS11,因为我的主应用程序需要Azure工具。

编辑:这在命令行中与msbuild配合使用,但在VS2010中没有。似乎在命令行,VS11编译器正在使用,即使我的目标是.NET 4.0,而VS2010使用自己的进程内编译器。有谁知道如何更换VS2010使用的编译器?

1 个答案:

答案 0 :(得分:2)

适用于我的LINQPad(机器上安装的VS11 Beta)

enter image description here