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