Workflow Foundation 4.0 Activity Data Model (III)

I finally finished the long overdued last installment of the Activity Data Model series. In this post, I focused on workflow variables. Conceptually workflow variables are very similar to variables in procedure programming languages like C#. But one thing special about workflow variables is the concept of “public” versus “implementation” variables. “Public” variables means variables defined by…


The first wave of WF4 Activity Packs are released

I’m very happy to annouce that my team just released 2 pack of Activities for WF4 on CodePlex! ·         State Machine Activity Pack. State Machine is one of the most common asks for WF4’s Activity Palette, especially for WF3 users. This Activity Pack includes a feature-rich State Machine supporting entry action, exit action, conditional transition, nested state,…


Workflow Foundation 4.0 Activity Data Model (II)

Here comes sequal of my WF4 Activity Data Model blog. This post focuses on WF arguments: the Argument class hierarchy which models arguments for WF; how to “declare” an argument for an activity; the automatic reflection; how to deal with dynamic arguments; what does expressions mean for WF; how to bind arguments to expressions; activity…


Workflow Foundation 4.0 Activity Data Model (I)

This is my first post about WF4’s Activity Data Model. The focus of this post is a high level principle which drives data model redesign between WF3 and WF4: separation of data and program. WF3 has Activity’s runtime state stored in the Activity itself which caused a lot of problems. WF4 abstracts out concept like Argument and Variable and…


Workflow Foundation 4.0 Activity Model (II)

I just posted the 2nd half of introduction to WF4’s Activity Model. In this blog, I have given examples of building 2 activities with 4 different authoring styles: how to build a leaf activity (HttpGet) using CodeActivity and AsyncCodeActivity; and how to build a composite activity (World) using Activity and NativeActivity.


Workflow Foundation 4.0 Activity Model (I)

I just posted one entry in our “Go with the Flow” team blog to explain Workflow foundation V4’s Activity Model. In the blog, I discussed how Workflow is composed of Activities and introduced basic Activity programming model in WF4. I quickly went over the 4 Activity base classes (Activity, CodeActivity, AsyncCodeActivity, and NativeActivity) for 4 different programing style (from fully decarlative…


A developer’s view of Workflow

This is my first blog post about Windows Workflow Foundation (WF) on the “Go with the flow” team blog. In the post I briefly described some key benefits of Workflow as a programming language: Declarative programming, Continuation, Persistence, and instance management.


Hello world, again

I’ve disappeared for more than 4 years in blog space. During this time period, I left CLR team and worked for Microsoft’s High Performance Computing (HPC) team for 3 years to build Windows based compute cluster infrastructure. One thing I’m particularly proud of is that in Super Computing 2008, a system powered by our product…


Trivial debugging note – using WeakReference in finalizer

Some time ago I saw a problem from a partner team in Microsoft that an InvalidOperationException is thrown from WeakReference.IsAlive. WeakReference wraps weak GC handle implemented in CLR’s Execution Engine (GC handle is also exposed by System.Runtime.InteropServices.GCHandle which supports not only weak handles, but other types too). A weak GC handle will be allocated and assigned to the…


Thread, System.Threading.Thread, and !Threads (III)

I got email asking me to explain !Threads output in details. I think this is a good question and a good topic for another installment to the series. Here is an example I’ll use for this post: 0:055> !threadsThreadCount: 202UnstartedThread: 95BackgroundThread: 1PendingThread: 0DeadThread: 47                                  PreEmptive   GC Alloc                     Lock             ID  ThreadOBJ       State     GC       Context           Domain    …