0
我情況下,我必須使用Task.Run
在我ForEach
循環如何殺死或中止Task.Run或Task.Factory.StartNew()在C#
要求: 我將被迫手動殺死線程 我有按鈕,我可以在For循環中啓動和停止此Thread
或Task.Run
。
問題 我的問題是,當我開始Task.Run方法及其運行,但是當我試圖停止使用CancellationTokenSource
或runningTaskThread.Abort();
它不會殺死。它剛剛停止時,我開始新的Task.Run在那個時候它運行與舊的線程,所以它成爲多個線程的每個啓動過程。
代碼:
下面是我開始線程代碼
var messages = rootObject.MultiQData.Messages.Where(m => m.TimeStamp > DateTime.Now).OrderBy(x => x.TimeStamp).ToList();
//Simulate MultiQ file in BackGroud
if (messages.Count > 0)
{
cancellationTokenSource = new CancellationTokenSource();
cancellationToken = cancellationTokenSource.Token;
Task.Factory.StartNew(
() =>
{
runningTaskThread = Thread.CurrentThread;
messages.ForEach(
m => SetUpTimer(m, rootObject.MultiQData.Connection.FleetNo));
}, cancellationToken);
}
對於停止Task.Run
if (cancellationTokenSource != null)
{
if (cancellationToken.IsCancellationRequested)
return;
else
cancellationTokenSource.Cancel();
}
我還用Thread
與Thread.Abort
但它不工作
請幫助解決這個問題