Я пытаюсь выяснить вывод этого кода:
Dictionary<int, MyRequest> request = new Dictionary<int, MyRequest>();
for (int i = 0; i < 1000; i++ )
{
request.Add(i, new MyRequest() { Name = i.ToString() });
}
var ids = request.Keys.ToList();
Parallel.For(0, ids.Count, (t) =>
{
var id = ids[t];
var b = request[id];
lock (b)
{
if (b.Name == 4.ToString())
{
Thread.Sleep(10000);
}
Console.WriteLine(b.Name);
}
});
Console.WriteLine("done");
Console.Read();
output:
789
800
875
.
.
.
4
5
6
7
done
MyRequest - просто фиктивный класс, используемый для демонстрации (ничего не делает, но держит ценности).Моя блокировка блокирует выполнение или последние 4 помещаются в собственный поток?
Это демонстрационная версия .NET 4.0.
ОБНОВЛЕНИЕ Хорошо, я понялони были в том же потоке, но я все еще хотел бы знать, если блокировка делает что-нибудь, чтобы заблокировать выполнение.Я не могу себе представить, что это так.