У меня возникла проблема сегодня, я не могу объяснить. У меня есть задача, которая вызывает метод, но целочисленный параметр, похоже, не обрабатывается как тип значения.Неожиданное поведение с Task и integer в .NET
я мог воспроизвести его в простой обстановке:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Start();
}
private static void Start()
{
int numberThreads = 3;
for (int i = 0; i < numberThreads; i++)
{
if (i == 3)
{
// Never gets hit
System.Diagnostics.Debugger.Break();
}
Task.Run(() => DoWork(i));
}
}
private static void DoWork(int index)
{
if (index == 3)
{
// index = 3
System.Diagnostics.Debugger.Break();
}
}
}
}
The (я == 3) в Start() никогда не проверяет истинно, (индекс == 3) в DoWork() всегда верно. Как это возможно?
Вы хотите знать, почему ваш 'if (i == 3)' не попадает? Это связано с тем, что ваши циклы for начинаются с нуля. Измените его на 'for (int i = 1; i
RandomStranger
Не поможет - вы также должны изменить условие от '<' до '<='. –
@ Джеймс, да, это странная вещь. Я бы не ожидал, что это может произойти. – FrankyHollywood