创建线程(Background Thread)的N种方式
第一、Thread類
Thread類是實(shí)例化線程的主要方法;一個Thread實(shí)例管理一個線程,即執(zhí)行序列。通過簡單實(shí)例化一個對象,就可以創(chuàng)建一個線程,然后通過Thread對象提供的方法對線程進(jìn)行管理。
Thread thread = new Thread(_ => BackgroundMethod("第一、Thread類創(chuàng)建線程"));thread.Start();thread.Join();
?
第二、ThreadPool(線程池)類
提供一個線程池,該線程池可用于執(zhí)行任務(wù)、發(fā)送工作項、處理異步 I/O、代表其他線程等待以及處理計時器。
ThreadPool.QueueUserWorkItem(_ => BackgroundMethod("第二、ThreadPool創(chuàng)建線程"));?
第三、delegate(委托)
委托異步回調(diào)方法創(chuàng)建線程,只需調(diào)用BeginInvoke委托和觸發(fā)線程。然后,調(diào)用EndInvoke將阻塞當(dāng)前線程。
BackgroundMethodDelegate x = new BackgroundMethodDelegate(BackgroundMethod);IAsyncResult a = x.BeginInvoke("第三、delegate委托", null, null);x.EndInvoke(a);
?
第四、BackgroundWorker類
在單獨(dú)線程上執(zhí)行操作
BackgroundWorker worker = new BackgroundWorker();worker.DoWork += delegate { BackgroundMethod("第四、BackGroundWorker創(chuàng)建線程"); };worker.RunWorkerAsync();
?
第五、System.Threading.Timer
創(chuàng)建一個計時器,提供以指定時間間隔執(zhí)行方法機(jī)制。
Timer timer = new System.Threading.Timer(_ => BackgroundMethod("第五、Timer計時器"), null, 0, Timeout.Infinite);?
第六、Task類
最簡單的任務(wù)異步操作
using (Task task = new Task(() => BackgroundMethod("第六、Task類創(chuàng)建異步任務(wù)"))){task.Start();task.Wait();}
?
第七、Task.Factory(Task另外一種創(chuàng)建方式)
創(chuàng)建實(shí)例工廠的訪問
Task.Factory.StartNew(() => BackgroundMethod("第七、Task第二種創(chuàng)建異步方式"));?
第八、Parallel類
? System.Threading.Tasks命名空間下的,提供對并行循環(huán)和區(qū)域支持
Parallel.Invoke(() => BackgroundMethod("第八、Parallel類"));?
第九、System.Reactive.Linq.Observable
Reactive Extensions 概要
Reactive Extensions (下面簡稱 Rx) 是在 Linq 可操作的數(shù)據(jù)源上針對 "異步"(BeginXXX/EndXXX) 和 "事件"(XXXCompleted) 上的擴(kuò)展,也可以被稱為 "Linq To Asynchronous" 和 " Linq To Events"。相比以前復(fù)雜的異步處理或者事件處理,Timer的處理等,結(jié)合Linq 形式的Rx編程模型更加簡潔。
關(guān)于 Rx 的安裝,可以通過?Reactive Extensions (Rx) 的主頁?的直接下載安裝,當(dāng)然也可以利用 NuGet 導(dǎo)入 dll (http://nuget.org/packages/Rx-Main) [譯注: NuGet 是VS集成的在線 dll部署工具,非常方便]。Rx 不管是 Installer 還是 NuGet 安裝的,都有 Stable(穩(wěn)定版) 和 Experimental(實(shí)驗(yàn)版) 兩種。
Observable.Return("第九、Observable類", Scheduler.Default).Subscribe(BackgroundMethod);
?
第十、ProcessStartInfo類
指定啟動進(jìn)程時使用的一組值,嚴(yán)格上應(yīng)該不處于創(chuàng)建線程這一欄,但已被建議作為一種方式在后臺做一些事情,即使它沒有資格作為一個后臺線程。 (根據(jù)定義,一個后臺線程是進(jìn)程中的一個線程不會防止進(jìn)程終止,而它仍然在運(yùn)行。 )
ProcessStartInfo startInfo = new ProcessStartInfo("StartThreads.exe", "OutOfProcess");startInfo.CreateNoWindow = false;startInfo.UseShellExecute = false;startInfo.RedirectStandardOutput = true;Process process = Process.Start(startInfo);Console.WriteLine(“第十:ProcessStartInfo”);process.WaitForExit();?測試源碼地址:http://files.cnblogs.com/xchit/StartThreads.rar
轉(zhuǎn)載于:https://www.cnblogs.com/xchit/p/3425542.html
總結(jié)
以上是生活随笔為你收集整理的创建线程(Background Thread)的N种方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作业五1
- 下一篇: SQL Server 堆表行存储大小(R