I understand that in general a List is not thread safe, however is there anything wrong with simply adding items into a list if the threads never perform any other operation
You current approach is not thread-safe - I would suggest avoiding this altogether - since you basically do a data transformation PLINQ might be a better approach ( I know this is a simplified example but in the end you are projecting each transaction into another "state" object).