Подтвердить что ты не робот

Как назвать поток, выполняющий задачу?

Я считаю, что имена имен очень полезны при отладке.

Я не вижу способа назвать поток с помощью аргументов Task.Factory.StartNew()

Итак, допустимо ли имя потока явно указывать в задаче? например:

private void MyFunc()
{
    Task.Factory.StartNew(() =>
    {
        Thread.CurrentThread.Name = "Foobulizer";
        Foobulize();
    });
}

Однако я понимаю, что потоки могут использоваться повторно для разных задач, поэтому мне нужно явно указать reset имя потока в конце задачи? Это кажется довольно взломанным, поэтому я думаю, что это, вероятно, плохая идея или есть правильный способ сделать это?

4b9b3361

Ответ 1

Вы не можете этого сделать, поскольку несколько задач могут совместно использовать один или несколько потоков, зависит от состояния ThreadPool в данный момент времени. В основном задача - это не Thread, это просто абстракция высокого уровня для асинхронной операции. Вы можете использовать свойство Task.Id, но имейте в виду, что Id имеет только чтение и тип int, поэтому вы не можете назначить пользовательский пользователь -дружественное имя.

Идентификаторы задач назначаются по требованию и необязательно представляют порядок, в котором были созданы экземпляры задачи

Взгляните на встроенные функции Visual Studio 2010 Parallel Debugging, возможно, вы найдете другой подход: Пошаговое руководство: отладка параллельного приложения

Окно параллельных задач:

enter image description here

Для каждой запущенной задачи вы можете прочитать ее идентификатор, который возвращается одноименное свойство, идентификатор и имя потока, который его запускает, его местоположение (зависание над ним отображает всплывающую подсказку, содержащую стек вызовов). Кроме того, в колонке "Задачи" вы можете увидеть метод, который был принят в задание; другими словами, начальная точка

Ответ 2

По умолчанию TaskScheduler используется .NET ThreadPool для планирования задач. Таким образом, вы получите поток, который уже существует, или тот, который будет повторно использован (как потенциально, так и вероятно).

Обратите внимание, что вы можете назвать поток только один раз. Вторая попытка вызвать Thread.CurrentThread.Name приведет к повышению InvalidOperationException. Это особенно плохо, когда поток потока потока.

В общем, вы не должны изменять атрибуты потока, которые вы (явно) не создали или не создали (имя - одно, priority - другое видные кандидаты).

Ответ 3

Конечно, вы можете просто удалить имя снова, когда закончите. установите thread Name снова в "Idle" ore string.Empty после Foobulize();