我想知道如何重用執行緒。我有一個 websocket 連接,它不斷發送需要進行一些計算的訊息。我想將此計算添加到一個執行緒,但不想每次都創建一個新執行緒。我怎樣才能使執行緒被重用?
client.MsgRecieved.Subscribe(info =>
{
Thread t = new Thread(() => Do_work(info));
};
有沒有辦法可以創建一個執行緒,命名它,然后添加Do_work()該執行緒?
編輯:
我每秒從 websocket 收到多條訊息。我寧愿讓他們在一個佇列中等待,而不是全部在一個新執行緒上運行。
uj5u.com熱心網友回復:
最簡單的模式就是
client.MsgRecieved.Subscribe(async info =>{
await Task.Run(Do_work(info));
});
它將在內置執行緒池上運行的方法排隊。
如果要將訊息排隊以在單個后臺執行緒上運行,可以使用 BlockingCollection,例如:
var workQueue = new System.Collections.Concurrent.BlockingCollection<Object>();
var workThread = new System.Threading.Thread(() =>
{
foreach (var work in workQueue.GetConsumingEnumerable())
{
Do_Work(work);
}
});
workThread.Start();
然后
client.MsgRecieved.Subscribe(info => {
workQueue.Add(info);
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/520380.html
標籤:C#多线程任务并行库
