使用异步代表投射/λ(Projection using async delegate/lambda)

2019-06-24 16:56发布

下面的代码不会编译针对异步CTP在Visual Studio 2010中:

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。 看来,在命令行中,VS11编译器正在即使我针对.NET 4.0,而VS2010使用它自己的进程编译器使用。 有谁知道如何换出的是VS2010使用编译器?

Answer 1:

作品在我的LINQPad(VS11测试版安装在机器上)



文章来源: Projection using async delegate/lambda