[C#]『Task』任务并行库使用小计

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1.简单创建使用

usingSystem;

usingSystem.Diagnostics;

usingSystem.Threading;

usingSystem.Threading.Tasks;

 

namespaceConsoleapplication17

{

classPRogram

{

staticvoidMain(string[] args)

{

try

{

/*

* Task 类还提供了初始化任务但不计划执行任务的构造函数。

* 出于性能方面的考虑,TaskFactory 的 StartNew 方法应该是创建和计划计算任务的首选机制,但是对于创建和计划必须分开的情况,

* 可以使用构造函数,然后可以使用任务的 Start 方法计划任务在稍后执行。

* 对于返回值的操作,应使用 Task<TResult> 类。————MSDN

*/

Task _task =newTask(() => { Console.WriteLine("my frist Task."); });

_task.Start();

 

Task _taskFactory = Task.Factory.StartNew(() => { Console.WriteLine("my frist Task by Factory."); });

}

catch(Exception ex)

{

Console.WriteLine(string.Format("Exception Message:{0}", ex.Message.Trim()));

}

finally

{

Console.ReadLine();

}

}

 

}

}

代码效果

 

2.Task处理返回值

usingSystem;

usingSystem.Diagnostics;

usingSystem.Threading;

usingSystem.Threading.Tasks;

 

namespaceConsoleApplication17

{

classProgram

{

staticvoidMain(string[] args)

{

try

{

Task<string> _task = Task<string>.Factory.StartNew(() =>

{

string_guid = System.Guid.NewGuid().ToString();

Console.WriteLine(string.Format("Pass Value:{0}", _guid));

return_guid;

});

Console.WriteLine(string.Format("Task Return Value:{0}", _task.Result));

}

catch(Exception ex)

{

Console.WriteLine(string.Format("Exception Message:{0}", ex.Message.Trim()));

}

finally

{

Console.ReadLine();

}

}

 

}

}

.csharpcode, .csharpcode pre

{

font-size: small;

color: black;

font-family: consolas, "Courier New", courier, monospace;

background-color: #ffffff;

/*white-space: pre;*/

}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp{ background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt

{

background-color: #f4f4f4;

width: 100%;

margin: 0em;

}

.csharpcode .lnum { color: #606060; }.csharpcode, .csharpcode pre

{

font-size: small;

color: black;

font-family: consolas, "Courier New", courier, monospace;

background-color: #ffffff;

/*white-space: pre;*/

}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt

{

background-color: #f4f4f4;

width: 100%;

margin: 0em;

}

.csharpcode .lnum { color: #606060; }代码效果

 

3.Task 任务延续

usingSystem;

usingSystem.Diagnostics;

usingSystem.Threading;

usingSystem.Threading.Tasks;

 

namespaceConsoleApplication17

{

classProgram

{

staticvoidMain(string[] args)

{

try

{

/*

* 使用 Task.ContinueWith 方法和 Task<TResult>.ContinueWith 方法,可以指定在前面的任务完成时要启动的任务。

* 延续任务的委托中将传入对前面的任务的引用,以便它可以检查其状态。

* 此外,可以在 Result 属性中将用户定义的值从前面的任务传递到其延续任务,

* 以便前面的任务的输出可以作为延续任务的输入。————MSDN

*/

Task<string> _task = Task<string>.Factory.StartNew(() =>

{

string_guid ="_task";

Console.WriteLine(_guid);

return_guid;

}).ContinueWith<string>((guid) =>

{

string_guid ="_task ContinueWith";

Console.WriteLine(string.Format("ContinueWith Task {0}", guid.Result));

return_guid;

});

Console.WriteLine(string.Format("Task Return Value:{0}", _task.Result));

}

catch(Exception ex)

{

Console.WriteLine(string.Format("Exception Message:{0}", ex.Message.Trim()));

}

finally

{

Console.ReadLine();

}

}

 

}

}

.csharpcode, .csharpcode pre

{

font-size: small;

color: black;

font-family: consolas, "Courier New", courier, monospace;

background-color: #ffffff;

/*white-space: pre;*/

}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt

{

background-color: #f4f4f4;

width: 100%;

margin: 0em;

}

.csharpcode .lnum { color: #606060; }代码效果

 

4.分离的嵌套任务

usingSystem;usingSystem.Diagnostics;usingSystem.Threading;usingSystem.Threading.Tasks;namespaceConsoleApplication17

{classProgram

{staticvoidMain(string[] args)

{try{/** 如果在任务中运行的用户代码创建一个新任务,* 且未指定 AttachedToParent 选项,则该新任务不采用任何特殊方式与外部任务同步。* 此类任务称为“分离的嵌套任务”。 ————MSDN* 说明:下面例子也来自于MSDN*其实意思就是父任务不会等待子任务*/Task _outer = Task.Factory.StartNew(() =>

{

Console.WriteLine("Outer task beginning.");

Task _child = Task.Factory.StartNew(() =>

{

Thread.SpinWait(5000000);

Console.WriteLine("Detached task completed.");

});

});

_outer.Wait();

Console.WriteLine("Outer task completed.");

}catch(Exception ex)

{

Console.WriteLine(string.Format("Exception Message:{0}", ex.Message.Trim()));

}finally{

Console.ReadLine();

}

}

}

}

.csharpcode, .csharpcode pre

{

font-size: small;

color: black;

font-family: consolas, "Courier New", courier, monospace;

background-color: #ffffff;

/*white-space: pre;*/

}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt

{

background-color: #f4f4f4;

width: 100%;

margin: 0em;

}

.csharpcode .lnum { color: #606060; }代码效果

 

5.创建子任务

usingSystem;usingSystem.Diagnostics;usingSystem.Threading;usingSystem.Threading.Tasks;namespaceConsoleApplication17

{classProgram

{staticvoidMain(string[] args)

{try{/** 如果在一个任务中运行的用户代码创建任务时指定了 AttachedToParent 选项,* 则该新任务称为原始任务的子任务,原始任务称为父任务。*因为父任务隐式地等待所有子任务完成,所以可以使用 AttachedToParent 选项表示结构化的任务并行。 ————MSDN* 说明:下面例子也来自于MSDN*其实意思就是父任务会等待子任务执行完后再结束*/Task _outer = Task.Factory.StartNew(() =>

{

Console.WriteLine("Outer task beginning.");

Task _child = Task.Factory.StartNew(() =>

{

Thread.SpinWait(5000000);

Console.WriteLine("Detached task completed.");

},TaskCreationOptions.AttachedToParent);

});

_outer.Wait();

Console.WriteLine("Outer task completed.");

}catch(Exception ex)

{

Console.WriteLine(string.Format("Exception Message:{0}", ex.Message.Trim()));

}finally{

Console.ReadLine();

}

}

}

}

.csharpcode, .csharpcode pre

{

font-size: small;

color: black;

font-family: consolas, "Courier New", courier, monospace;

background-color: #ffffff;

/*white-space: pre;*/

}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt

{

background-color: #f4f4f4;

width: 100%;

margin: 0em;

}

.csharpcode .lnum { color: #606060; }代码效果

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航