В моем приложении мне нужно принудительно остановить задачу, когда она превышает установленный таймаут. Пока я не вижу, что я могу только отменить поток через токен, но поток по-прежнему будет выполняться в фоновом режиме. Даже если я бросаю исключение после тайм-аута, поток продолжает работать ...Как я могу принудительно остановить поток
Существует пример кода и результата:
internal class Program
{
private static void Main(string[] args)
{
for (int i = 1; i <= 5; i++)
{
var cls = new CancellationTokenSource();
Task task = Task.Factory.StartNew(state =>
{
Console.WriteLine("Task Started");
Timer timer = new Timer(TimeElapsed, cls, 3000, 0);
Thread.Sleep(6000);
Console.WriteLine("End Task");
}, cls.Token);
}
Console.ReadLine();
}
private static void TimeElapsed(object obj)
{
try
{
var cls = (CancellationTokenSource)obj;
cls.Cancel();
cls.Token.ThrowIfCancellationRequested();
}
catch (Exception)
{
Console.WriteLine("Aborted");
}
}
}
Уверены ли вы? Вы хотите убить нить зверски? 'Abort()' - это то, что вы ищете? –