Можно ли всегда принудительно создать новый поток с помощью Task?C#

Место общения программистов C#
Ответить
Anonymous
 Можно ли всегда принудительно создать новый поток с помощью Task?

Сообщение Anonymous »

Я пытаюсь создать новый поток каждый раз при вызове Task.Factory.StartNew. Вопрос в том, как запустить приведенный ниже код, не создавая исключения:
static void Main(string[] args)
{
int firstThreadId = 0;

Task.Factory.StartNew(() => firstThreadId = Thread.CurrentThread.ManagedThreadId);

for (int i = 0; i < 100; i++)
{
Task.Factory.StartNew(() =>
{
while (true)
{
Thread.Sleep(1000);
if (firstThreadId == Thread.CurrentThread.ManagedThreadId)
throw new Exception("The first thread is reused.");
}
});
}
Console.Read();
}

РЕДАКТИРОВАТЬ: новый код, если вы прокомментируете первый оператор for, проблем не возникнет. Но если он у вас есть, ВАУ, в консоль пишется сообщение "Thread reused". Можете ли вы объяснить это, потому что я действительно в замешательстве.
static void Main(string[] args)
{
ConcurrentDictionary startedThreads = new ConcurrentDictionary();

for (int i = 0; i < 10; i++)
{
Task.Factory.StartNew(() =>
{
Task.Factory.StartNew(() =>
{
startedThreads.AddOrUpdate(Thread.CurrentThread.ManagedThreadId,
Thread.CurrentThread.ManagedThreadId, (a, b) => b);
}, TaskCreationOptions.LongRunning);

for (int j = 0; j < 100; j++)
{
Task.Factory.StartNew(() =>
{
while (true)
{
Thread.Sleep(10);
if (startedThreads.ContainsKey(
Thread.CurrentThread.ManagedThreadId))
Console.WriteLine("Thread reused");
}
}, TaskCreationOptions.LongRunning);
}
});
}

Console.Read();
}


Подробнее здесь: https://stackoverflow.com/questions/135 ... -with-task
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»