2012-05-23 4 views
1

Следующий код не будет компилироваться против асинхронного 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>, TSource является int
  • Создание лямбда асинхр, принимая int и возвращающий int должен производить Task<int>, что и TResult должно быть.

Я не вижу здесь проблемы с синтаксисом. В чем проблема?

Обратите внимание, что я не могу использовать VS11 еще потому, что для моего основного приложения требуются инструменты Azure.

EDIT: Это нормально работает с msbuild в командной строке, но не в VS2010. Кажется, что в командной строке используется компилятор VS11, хотя я нацелен на .NET 4.0, тогда как VS2010 использует свой собственный компилятор в процессе. Кто-нибудь знает, как заменить компилятор, который использует VS2010?

+0

вне изменения TaskEx к задаче, отлично работает в моем LINQPad и VS11, так выглядит как CTP ошибка? –

+0

Не уверен, что я понимаю ограничение Azure? Я установил azure sdk через nuget в моих проектах vs11 beta отлично - я не понимаю? –

+1

FWIW, возможно, вы сможете обход этого в CTP, выполнив что-то вроде «Func > foo = async x => ..», а затем передайте это в Select? –

ответ

2

Работы в моем LINQPad (VS11 Beta, установленные на машине)

enter image description here

Смежные вопросы