[异步编程] 使用 ZAsyncInvoker 进行异步编程教程之一:Hello,world

ZAsync 是由吉林省左右软件开发有限公司开发的一套异步编程框架,目标是用来简化异步编程模型。

在异步编程时,我们要解决几个问题:

1、异步操作的生命周期:

  • 开启一个异步操作
  • 在后台执行异步操作
  • 异步操作执行完成
  • 回调通知异步执行结果
  • 异步操作结束清理释放

2、异步参数传递:

  • 参数的生命周期管理
  • 参数值修改问题

3、异步操作执行控制:

  • 等待异步操作完成
  • 中止异步操作执行

4、多步操作控制

  • 条件步骤
  • 重复操作
  • 中断操作
  • 参数传递

ZAsync 试图解决这一系列问题,首先我们引入的是一个 IZAsyncInvoker 接口,它负责解决异步操作的生命周期的管理。

IZAsyncInvoker 提供以下方法:

1、Cancel 用来取消正在进行的异步作业,取消操作完成后。如果作业在循环执行中,代码可以通过检查 IsCanceled 标志位来判断作业被中止,从而退出。

2、WaitComplete 用来等待一个异步作业结束。

3、Invoke 用于触发实现的异步调用。

4、IsCanceled 是作业取消标志位,IsComplete 是作业是否完成标志位(取消完成也是完成,注意同时检查 IsCanceled 标志位),IsInvoking 是作业是否进行中标志位。

5、Params 是调用者传过来的参数,可以通过 HasParam 来获取参数的值。

6、Linked 用于关联一些用户数据,这个数据具体用途和使用方法由用户决定。

那么如何创建一个IZAsyncInvoker对象呢?

上面两个方法提供了默认的实现,如果当前调用者是一个组件的话,我们可以直接使用组件的生命周期管理建立与IZAsyncInvoker之间的关联,在组件释放前,会自动调用 IZAsyncInvoker 的 Cancel 方法来取消异步操作。反之,如果异步的回调里,访问了要被释放的资源,应在资源释放前,调用 Cancel 方法来取消异步调用。

下面是一个简单的例子:

在上面的例子中,我们在后台线程中执行一个HTTP请求,在回应回来后,如果窗体被释放了,那么 AInvoker.IsCanceled 会返回 True,从而避免后续代码的执行。

分享到:

评论已关闭。