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();
}
}
}
}
代碼效果

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();
}
}
}
}
代碼效果

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();
}
}
}
}
代碼效果

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(); } } }}
代碼效果

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(); } } }}
代碼效果

新聞熱點
疑難解答