У меня есть довольно простой код, использующий Protobuf.net, который выдает очень странное исключение.В MetaType.cs в строке 167 он генерирует исключение InvalidOperationException «Тип не может быть изменен после генерации сериализатора».Что это значит и как я могу это исправить?
Мой код выглядит так:
Этот метод запускает всю сериализацию:
while (!Parallel.For(0, 100, (i) =>
{
Widget w;
lock (f) { w = f.CreateWidget(); }
SerialiseWidget(w);
}).IsCompleted)
{
Thread.Sleep(10);
}
Довольно просто, этопросто проходит через все параллельно и сериализует 100 виджетов.
Метод serialise также довольно прост:
private byte[] SerialiseWidget(Widget w)
{
using (MemoryStream m = new MemoryStream())
{
Serializer.Serialize<PacketChunk>(m, w);
return m.ToArray();
}
}
И, наконец, класс виджета выглядит следующим образом:
[ProtoContract]
private class Widget
{
[ProtoMember(1)]
public int a;
[ProtoMember(2)]
public byte[] b;
[ProtoMember(3)]
public Thing c; //Thing is itself a protocontract
[ProtoMember(4)]
public int d;
[ProtoMember(5)]
public int e;
}
Edit :: Я подозреваю, что это может быть связано с тем, что я зацикливаюсь параллельно.Насколько безопасен Protobuf.net для такого рода вещей?