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(); } } }}
代碼效果
新聞熱點
疑難解答