Из любопытства, я пытаюсь получить некоторые простые async
/await
код для компиляции под .NET 3.5 Профиль клиента:Каков минимальный набор типов, необходимых для компиляции кода `async`?
async void AwaitFoo()
{
await new Foo();
}
class Foo
{
public IFooAwaiter GetAwaiter() { … }
}
interface IFooAwaiter : System.Runtime.CompilerServices.INotifyCompletion
{
bool IsCompleted { get; }
void GetResult();
}
Я прекрасно понимал, что .NET 3.5 не поддерживает эту функцию языка, как выражаются этой ошибки компиляции:
Cannot find all types required by the
async
modifier. Are you targeting the wrong framework version, or missing a reference to an assembly?
Я также осведомлен о NuGet package Microsoft.Bcl.Async
, который не имеет поддержки .NET 3.5.
Вопрос: Что такое минимальный набор типов & членов типа требуется для async
кода для компиляции? Является ли этот минимальный набор официально документированным; и если да, то где? (Обратите внимание, что я заинтересован только в успешной компиляции, а не выполнения.)
То, что я получил до сих пор:
Я пытался найти этот минимальный набор типов по эксперимент, который, как представляется возможным, так как сообщения компилятора требуется, но отсутствующие типы по одному:
Predefined type
System.Runtime.CompilerServices.IAsyncStateMachine
is not defined or imported.
Определение заявленную типа в соответствии со справочными страницами MSDN затем приводит к следующему недостающее типа сообщается. У меня до сих пор:
System.Runtime.CompilerServices.IAsyncStateMachine
System.Runtime.CompilerServices.INotifyCompletion
(требуется пример кода выше)System.Threading.Tasks.CancellationToken
(требуемаяTask
)System.Threading.Tasks.TaskCreationOptions
(требуемаяTask
)System.Threading.Tasks.Task
В этот момент я topside, так как Task
имеет множество членов, но компилятор не сообщает точно, какие члены он требует; он просто сообщает тип в целом. Поэтому я мог бы воспроизвести гораздо больше определения типа, чем того, что действительно необходимо.
Спасибо. Вы сами узнали о типах в своем списке, или вы взяли список из официальной документации? - Спасибо также за ссылку Eduasync, я уже начал читать эти статьи в блоге. – stakx
@stakx: Ну, я изначально создал список, когда я пошел и реализовал бит Eduasync, но теперь я оглядываюсь на типы, которые, как я знаю, используют компилятор в сгенерированном коде. –