MEF or Managed Extensibility Framework is cool. Firstly, it allows you to decouple your components pretty easily. Secondly, it supports various component discovery scenarios, and enables you to write better frameworks.

Reactive Extensions will soon become the de-facto for writing asynchronous code in a declarative manner .NET Rx gives greater freedom to compose new events – you can create specific events out of general events

With those multi core processors everywhere, support for parallelism is an already implicit requirement for any new application. NET 4.0 framework provides a wealth of easy to use primitives and abstractions to enable developers to quickly write parallel programs, targeting multi core machines.

C# 4.0 introduced dynamic capabilities (duck typing) capabilities. There are a number of scenarios where the dynamic features can really simplify things for you. For example, let us assume a Reflection based scenario where you load a type (from an external assembly or so) to invoke a member, or think about a dynamic fluent wrapper on top of XML or JSON.