func _testSendChord(server *machinery.Server, t *testing.T) { tasks := _getTasks() group := machinery.NewGroup(&tasks[0], &tasks[1], &tasks[2]) chord := machinery.NewChord(group, &tasks[4]) chordAsyncResult, err := server.SendChord(chord) if err != nil { t.Error(err) } result, err := chordAsyncResult.Get() if err != nil { t.Error(err) } if result.Interface() != int64(88) { t.Errorf( "result = %v(%v), want int64(88)", result.Type().String(), result.Interface(), ) } }
func main() { /* * First, let's try sending a single task */ initTasks() fmt.Println("Single task:") asyncResult, err := server.SendTask(&task0) errors.Fail(err, "Could not send task") result, err := asyncResult.Get() errors.Fail(err, "Getting task state failed with error") fmt.Printf("1 + 1 = %v\n", result.Interface()) /* * Now let's explore ways of sending multiple tasks */ // Now let's try a parallel execution initTasks() fmt.Println("Group of tasks (parallel execution):") group := machinery.NewGroup(&task0, &task1, &task2) asyncResults, err := server.SendGroup(group) errors.Fail(err, "Could not send group") for _, asyncResult := range asyncResults { result, err = asyncResult.Get() errors.Fail(err, "Getting task state failed with error") fmt.Printf( "%v + %v = %v\n", asyncResult.Signature.Args[0].Value, asyncResult.Signature.Args[1].Value, result.Interface(), ) } // Now let's try a group with a chord initTasks() fmt.Println("Group of tasks with a callback (chord):") group = machinery.NewGroup(&task0, &task1, &task2) chord := machinery.NewChord(group, &task4) chordAsyncResult, err := server.SendChord(chord) errors.Fail(err, "Could not send chord") result, err = chordAsyncResult.Get() errors.Fail(err, "Getting task state failed with error") fmt.Printf("(1 + 1) * (2 + 2) * (5 + 6) = %v\n", result.Interface()) // Now let's try chaining task results initTasks() fmt.Println("Chain of tasks:") chain := machinery.NewChain(&task0, &task1, &task2, &task3) chainAsyncResult, err := server.SendChain(chain) errors.Fail(err, "Could not send chain") result, err = chainAsyncResult.Get() errors.Fail(err, "Getting chain result failed with error") fmt.Printf("(((1 + 1) + (2 + 2)) + (5 + 6)) * 4 = %v\n", result.Interface()) }