func (w *Workflow) MakeTaskNode(name string, t Task) *TaskNode {
	tn := &TaskNode{
		id:   MakeID(name),
		name: name,
		C:    make(chan *Params, 1),  
	}
	tn.SetTask(t)
	tn.SetWorkFlow(w)
	w.registerNode(tn)
	return tn
}
Make a task node with the given task and register it with the workflow
package flow
import (
	"github.com/golang/glog"
)
type Workflow struct {
	Name           string
	Start          *TaskNode                     
	End            TriggeredTaskNode             
	Params         *Params                       
	C              chan *Params                  
	Stepper        chan int                      
	TaskNodes      map[string]TriggeredTaskNode  
	Stop           bool                          
	IgnoreTriggers bool                          
}
func MakeWorkflow() *Workflow {
	return &Workflow{
		C:              make(chan *Params),
		Stepper:        make(chan int),
		TaskNodes:      make(map[string]TriggeredTaskNode),
		IgnoreTriggers: false,
	}
}
func (w *Workflow) registerNode(tn TriggeredTaskNode) {
	node, in := w.TaskNodes[tn.Id()]
	if in {
		if node != tn {
			panic("two nodes with the same id " + tn.Id())
		}
	}
	w.TaskNodes[tn.Id()] = tn
}