tasks

package module
v0.0.0-...-5bd5ed5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 12, 2016 License: GPL-2.0 Imports: 6 Imported by: 0

README

基于Golang的异步任务包

简介

对goroutine进行封装,使用起来更方便。

作者之前是写C#的,C#异步方法使用起来很方便,尤其是基于async 和wait 关键字的异步。在Go语言中使用协程也很简单,但是异步的等待、回调、多异步等待不如C#方便。

因此,根据C#的Tasks类库,进行封装Golang的goroutine。

使用

#####示例1、:

	handler := func() string {
		fmt.Println("aaaaaaa");
		return "完成了";
	}
        //新建一个任务
	task := NewTask(handler);
        //运行并等待任务完成
	task.Run().Wait();
        //打印任务执行结果
	fmt.Println(task.Result)

#####示例2、:

        handler1 := func(){
		fmt.Println(time.Now())
		fmt.Println("handler1","我在等待指定的时间后执行");
	}
	param2 := "aaaaaaaaaaaaaaaaaaaaaa";
	handler2 := func(p string) {
		fmt.Println("handler2",time.Now())
		fmt.Println(p);
	}
	param3 := "bbbbbbbbbbbbbbbbbbbbbbbbbb";
	handler3 := func(p string) string {
		fmt.Println(p);
		return p+"111111111111111";
	}

        //新建一个任务并添加执行完成后的延续任务,同时指定任务延时执行时间
	task1 := NewTask(handler1).ContinueWith(func(result TaskResult){
		fmt.Println("我在task1执行后执行。");
	}).ContinueWith(func(result TaskResult){
		fmt.Println("我在task1执行后第二次执行。");
	}).Delay(5*time.Second).Run();
	task2 := NewTask(handler2,param2).Run();
	task3 := NewTask(handler3,param3).Run();

        //批量等待任务完成
	WaitAll(task1,task2,task3);
	fmt.Println(task3.Result)

#####示例3:

	handler1 := func(){
		fmt.Println(time.Now())
		fmt.Println("TestTaskList_Add: handler1");
	}
	param2 := "TestTaskList_Add:aaaaaaaaaaaaaaaaaaaaaa";
	handler2 := func(p string) {
		fmt.Println("TestTaskList_Add:handler2",time.Now())
		fmt.Println(p);
	}
	param3 := "TestTaskList_Add: bbbbbbbbbbbbbbbbbbbbbbbbbb";
	handler3 := func(p string) string {
		fmt.Println(p);
		return p+"111111111111111";
	}

	task1 := NewTask(handler1);
	task2 := NewTask(handler2,param2);
	task3 := NewTask(handler3,param3);

        //新建一个任务列表
	taskList := NewTaskList();

        //添加任务到列表中,同时执行任务,然后等待所有任务完成。
	taskList.AddRange(task1,task2,task3).Run().WaitAll();

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func WaitAll

func WaitAll(tasks ...*Task)

等待所有任务都完成

Types

type ContinueWithHandler

type ContinueWithHandler func(TaskResult)

等待任务执行完成的后续任务

type Task

type Task struct {
	Result TaskResult //任务执行完成的返回结果

	IsCompleted bool //表示任务是否执行完成
	// contains filtered or unexported fields
}

一个任务

func NewTask

func NewTask(handler TaskHanlder, params ...TaskParameter) *Task

新建一个任务

func StartNew

func StartNew(handler TaskHanlder, params ...TaskParameter) *Task

立即启动一个异步任务

func (*Task) ContinueWith

func (task *Task) ContinueWith(handler ContinueWithHandler) *Task

当前Task执行完后执行

func (*Task) Delay

func (task *Task) Delay(delay time.Duration) *Task

延迟指定的时间后执行

func (*Task) Run

func (task *Task) Run() *Task

启动异步任务

func (*Task) Wait

func (task *Task) Wait()

等待任务完成

type TaskHanlder

type TaskHanlder interface{}

执行的方法

type TaskList

type TaskList struct {
	// contains filtered or unexported fields
}

func NewTaskList

func NewTaskList() *TaskList

func (*TaskList) Add

func (tlist *TaskList) Add(task *Task) *TaskList

将一个任务添加到任务列表中

func (*TaskList) AddRange

func (tlist *TaskList) AddRange(tasks ...*Task) *TaskList

批量添加任务到任务列表中

func (*TaskList) Run

func (tlist *TaskList) Run() *TaskList

运行任务列表中的所有任务

func (*TaskList) WaitAll

func (tlist *TaskList) WaitAll()

等待所有任务执行完成

type TaskParameter

type TaskParameter interface{}

参数

type TaskResult

type TaskResult struct {
	Result interface{}
	Error  error
}

返回的参数类型

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL