国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

[C#]『Task』任務(wù)并行庫使用小計

2019-11-14 16:47:54
字體:
供稿:網(wǎng)友

1.簡單創(chuàng)建使用

using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
 
namespace Consoleapplication17
{
    class PRogram
    {
        static void Main(string[] args)
        {
            try
            {
                /*
                 *  Task 類還提供了初始化任務(wù)但不計劃執(zhí)行任務(wù)的構(gòu)造函數(shù)。 
                 *  出于性能方面的考慮,TaskFactory 的 StartNew 方法應(yīng)該是創(chuàng)建和計劃計算任務(wù)的首選機(jī)制,但是對于創(chuàng)建和計劃必須分開的情況,
                 *  可以使用構(gòu)造函數(shù),然后可以使用任務(wù)的 Start 方法計劃任務(wù)在稍后執(zhí)行。
                 *  對于返回值的操作,應(yīng)使用 Task<TResult> 類。————MSDN
                 */
                Task _task = new Task(() => { 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();
            }
        }
 
    }
}

代碼效果

image

 

2.Task處理返回值

using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
 
namespace ConsoleApplication17
{
    class Program
    {
        static void Main(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();
            }
        }
 
    }
}

代碼效果

image

 

3.Task 任務(wù)延續(xù)

using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
 
namespace ConsoleApplication17
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                /*
                 * 使用 Task.ContinueWith 方法和 Task<TResult>.ContinueWith 方法,可以指定在前面的任務(wù)完成時要啟動的任務(wù)。 
                 * 延續(xù)任務(wù)的委托中將傳入對前面的任務(wù)的引用,以便它可以檢查其狀態(tài)。
                 * 此外,可以在 Result 屬性中將用戶定義的值從前面的任務(wù)傳遞到其延續(xù)任務(wù),
                 * 以便前面的任務(wù)的輸出可以作為延續(xù)任務(wù)的輸入。————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();
            }
        }
 
    }
}

代碼效果

image

 

4.分離的嵌套任務(wù)

using System;using System.Diagnostics;using System.Threading;using System.Threading.Tasks;namespace ConsoleApplication17{    class Program    {        static void Main(string[] args)        {            try            {                /*                 * 如果在任務(wù)中運行的用戶代碼創(chuàng)建一個新任務(wù),                 * 且未指定 AttachedToParent 選項,則該新任務(wù)不采用任何特殊方式與外部任務(wù)同步。                  * 此類任務(wù)稱為“分離的嵌套任務(wù)”。 ————MSDN                 * 說明:下面例子也來自于MSDN                 * 其實意思就是父任務(wù)不會等待子任務(wù)                 */                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();            }        }    }}

代碼效果

image

 

5.創(chuàng)建子任務(wù)

using System;using System.Diagnostics;using System.Threading;using System.Threading.Tasks;namespace ConsoleApplication17{    class Program    {        static void Main(string[] args)        {            try            {                /*                 * 如果在一個任務(wù)中運行的用戶代碼創(chuàng)建任務(wù)時指定了 AttachedToParent 選項,                 * 則該新任務(wù)稱為原始任務(wù)的子任務(wù),原始任務(wù)稱為父任務(wù)。                  * 因為父任務(wù)隱式地等待所有子任務(wù)完成,所以可以使用 AttachedToParent 選項表示結(jié)構(gòu)化的任務(wù)并行。 ————MSDN                 * 說明:下面例子也來自于MSDN                 * 其實意思就是父任務(wù)會等待子任務(wù)執(zhí)行完后再結(jié)束                 */                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();            }        }    }}

代碼效果

image


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 临汾市| 微博| 枝江市| 景泰县| 习水县| 扶沟县| 永登县| 徐闻县| 延庆县| 江阴市| 耒阳市| 含山县| 临湘市| 开江县| 佛教| 怀安县| 定西市| 苗栗县| 文登市| 赫章县| 玉门市| 宝清县| 洛浦县| 宜阳县| 南宫市| 石台县| 南和县| 晴隆县| 榕江县| 宣威市| 垫江县| 屏东市| 新河县| 永德县| 南郑县| 桐乡市| 龙南县| 濮阳县| 浦县| 丹凤县| 名山县|