2013-03-11 2 views
6

Как программист на C#, который заинтересован в изучении «как все работает», мне интересно узнать немного больше об этом процессе, который делает работу с функцией aync .Является ли новая функция C# async реализована строго в компиляторе

Я следовал за отличную серию статей Эрик Липперт на асинхронном: Async blog posts

Я не помню, где-нибудь какой-либо ссылки на реализацию этой функции (на высоком уровне) за то, кроме «компилятор делая большую часть работы »для нас.

Является ли эта функция строго функция компилятора тогда? компилятор каким-то образом переписывает код и все? или есть другие вещи, такие как поддержка времени выполнения, которая делает это возможным?

ответ

20

Нет, это не совсем в компиляторе. Он опирается на некоторых новых интерфейсах, такие как INotifyCompletion и некоторой рамочной реализации поддержки, такие как AsyncTaskMethodBuilder. Я не верю, что есть какие-либо изменения в CLR.

компилятор делает много работы, создание государственной машины - это как раз относится к нескольким из этих типов в государственной машине. О, и многие из Task-связанных типов были значительно изменены в основном по соображениям производительности.

У меня есть series of blog posts, которые были первоначально написаны против CTP, но только с использованием vanilla .NET 4 и некоторых классов я взбивал сам. Они не будут работать против реализации производства (поскольку со временем ситуация немного изменилась), но они дадут вам общее впечатление о том, что происходит за кулисами.

+2

FGITW резервного копирования с * серией * сообщений в блоге. Трудно не повышать это. Я все еще работаю над вашей серией Edulinq. –

+2

Я не помню, чтобы какие-либо изменения в CLR не были, но я не следовал за этим. Стивен точно знал бы. –

+0

@EricLippert: Учитывая [асинхронной таргетирования пакет] (http://nuget.org/packages/Microsoft.Bcl.Async) для более ранних версий было бы по крайней мере сделать все сложнее. Конечно, возможно, были оптимизации, чтобы сделать это лучше * на 4.5 CLR :) –

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