/// <summary>
/// 自定义的ActionBlock类
/// </summary>
/// <typeparam name="T"></typeparam>
public class ActionBlockClass<T>
{
public ActionBlock<T> actionBlock;
/// <summary>
/// 构造函数 并且初始化delegate
/// </summary>
public ActionBlockClass()
{
actionBlock = new ActionBlock<T>(str => DoWork(str));
}
/// <summary>
/// post进去
/// </summary>
/// <param name="str"></param>
public void Post(T str)
{
actionBlock.Post(str);
}
/// <summary>
/// 自己定义的委托方法
/// </summary>
/// <param name="str"></param>
public void DoWork(T str)
{
Console.WriteLine("hello , " + str);
}
/// <summary>
/// complete完成 之后在post就不会执行了
/// </summary>
public void Complete()
{
actionBlock.Complete();
}
/// <summary>
/// 阻塞进程 等待所有任务的执行完毕
/// </summary>
public void Wait()
{
actionBlock.Completion.Wait();
}
}
static void Main(string[] args)
{
//初始化ActionBlock
ActionBlockClass<string> actionBlockTest = new ActionBlockClass<string>();
//往里加入一百个数据
for (int i = 0; i < 100; i++)
{
//post进去
actionBlockTest.Post("~~~" + i);
//Thread.Sleep(2000);
//如果到达了50就完成了 之后的也不会执行
if (i == 50)
{
actionBlockTest.Complete();
}
}
//等待所有任务执行完毕
actionBlockTest.Wait();
Console.WriteLine("Hello World!");
}
正常wait的结果,阻塞线程,等待执行完在输出helloworld
不wait直接异步走,主线程执行完ActionBlock执行结束线程关闭