Asynchronous Programming Models in C#

Pattern Description Based On Notes
Thread based By creating System .Threading .Thread instance Managed Thread Expensive, not recommended
Standard BeginXxx and EndXxx methods By calling BeginXxx method with a user callback; calling EndXxx inside that user callback Thread pool Widely used, standard, recommended, support cancellation and continuation
ThreadPool By calling ThreadPool’s static QueueUserWorkItem method Thread pool Widely used, recommended use as much as possible
Delegate By calling Delegate’s BeginInvoke and EndInvoke instance methods Thread pool Less used
Event based By subscribing to the appropriate event and calling the appropriate method Thread pool Avoid use as much as possible, not recommended
Task based By creating System .Threading .Tasks .Task instance A specified task scheduler Recommended, supports all features of a thread pool pattern, and has many other features
async method and await expression By using async and await keywords Task based pattern The new C# 5.0 asynchronous pattern

Read more in The Asynchronous Programming Models (C# 5.0 Series) at CodeProject

Universal Type Converter – CodeProject

Converting nearly every type to another type in .NET

“.NET does not provide a generic way for conversions across all types. Even the base types are not handled the same way. And not all possible conversions across the base types are supported. We had a look at the different techniques and ended up with the UniversalTypeConverter as a generic solution filling the gaps and with some useful options on top.

Maybe, it is a historical thing that TypeConverter is not used on all types. But this is definitely the way to go if you want to provide your own types being convertible.”

Source: Universal Type Converter – CodeProject