Я пытаюсь создать новый поток каждый раз при вызове 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