WF4.0 基础篇 (二十四) Async Activity

例子下载:

http://files.cnblogs.com/foundation/AsyncCodeActivitySample.rar

 

项目说明:

image.png


Async Activity


Async的意思是异步,但有一点一定要注意,不能按字面理解,该Activity的功能是以同步的方式调用异步方法的Activity

建议看过[WF4.0 基础篇 (十三) InvokeMethod 调用方法 ]后,再看本文

 

 

类名

System.Activities.AsyncCodeActivity

文件

System.Activities.dll

结构说明

继承 Activity

是一个 abstract类

override 了 [CacheMetadata方法]

提供两个 abstract方法 [BeginExecute],[EndExecute]

功能说明

AsyncCodeActivity的主要目的是实现当Activity中有异步操作时,如何等待有异步完成后才向下执行的问题,也就是说如何将并行变为串行

 

 

类名

System.Activities.AsyncCodeActivity<TResult>

文件

System.Activities.dll

结构说明

继承 Activity<TResult>

是一个 abstract类

override 了 [CacheMetadata方法]

提供两个 abstract方法 [BeginExecute],[EndExecute]

功能说明

与AsyncCodeActivity,可以在[EndExecute]方法中return 返回值

 

image.png

 

 

 

 

 

 

例1:AsyncCodeActivity

等待[BeginXXX]方法(以FileStream.BeginWrite为例)

 

myAsyncWriteFile

public sealed class myAsyncWriteFileAsyncCodeActivity

{

public InArgument<string> fileName

{

set;

get;

}

 

public InArgument<string> fileData

{

set;

get;

}

 

protected override IAsyncResult BeginExecute(AsyncCodeActivityContext context, AsyncCallback callback, object state)

{

string fn = context.GetValue(fileName);

string fd = context.GetValue(fileData);

 

System.Console.WriteLine("开始写入文件");

FileStream fileStream = File.Open(fn, FileMode.Create);

context.UserState = fileStream;

byte[] bytes = UnicodeEncoding.Unicode.GetBytes(fd);

IAsyncResult r = fileStream.BeginWrite(bytes, 0, bytes.Length, callback, state);

return r;

}

 

protected override void EndExecute(AsyncCodeActivityContext context, IAsyncResult result)

{

System.Threading.Thread.Sleep(5000);

 

FileStream file = (FileStream)context.UserState;

file.EndWrite(result);

file.Flush();

file.Close();

System.Console.WriteLine("写入文件完成");

}

}

流程

image.png

宿主

WorkflowInvoker.Invoke(new myAsyncWriteFileWorkflow());

结果

image.png

 

例2:AsyncCodeActivity<TResult>

等待[BeginXXX]方法(以FileStream.BeginWrite为例)

 

myAsyncWriteFileByResult

public sealed class myAsyncWriteFileResult : AsyncCodeActivity<string>

{

public InArgument<string> fileName

{

set;

get;

}

 

public InArgument<string> fileData

{

set;

get;

}

 

protected override IAsyncResult BeginExecute(AsyncCodeActivityContext context, AsyncCallback callback, object state)

{

string fn = context.GetValue(fileName);

string fd = context.GetValue(fileData);

 

System.Console.WriteLine("开始写入文件");

FileStream fileStream = File.Open(fn, FileMode.Create);

context.UserState = fileStream;

byte[] bytes = UnicodeEncoding.Unicode.GetBytes(fd);

IAsyncResult r = fileStream.BeginWrite(bytes, 0, bytes.Length, callback, state);

return r;

}

 

protected override string EndExecute(AsyncCodeActivityContext context, IAsyncResult result)

{

System.Threading.Thread.Sleep(5000);

 

FileStream file = (FileStream)context.UserState;

file.EndWrite(result);

file.Flush();

file.Close();

System.Console.WriteLine("写入文件完成");

return "写入成功";

}

 

 

}

流程

image.png

宿主

 

WorkflowInvoker.Invoke(new myAsyncWriteFileByResultWorkflow());

结果

 

image.png

 


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864