Internal_CloneSingle Error

In one cs file I defined a class named “ConnectServer” which connected to the server:

    public event EventHandler Changed;
    BeginRecieve(){
        ...
        AsyncCallback callback = new AsyncCallback(OnData);
        connection = socket.BeginReceive(coords, 0, coords.Length, SocketFlags.None, callback, null);
    }
    private void OnData() {
        GPSDATA gps = (GPSDATA)BytesToStuct(coords, typeof(GPSDATA));
        gpslist.Add(gps);
        if (Changed != null)
            Changed(this, EventArgs.Empty);
    }

In the other Script:

    public Transform trans;
    void Start(){
        cs = new ConnectServer();
        cs.BeginRecieve();
        cs.Changed += OnAddData;
    }
    OnAddData(){
        Instantiate(trans);
    }

but It can not work and occured an error:

UnityEngine.Object:Internal_CloneSingle(Object)
UnityEngine.Object:Instantiate(Object) (at C:\BuildAgent\work\6bc5f79e0a4296d6\Runtime\ExportGenerated\Editor\BaseClass.cs:65)
ConnectServerTest:OnAddData(Object, EventArgs) (at Assets\ConnectServerTest.cs:30)
ConnectServer:OnData(IAsyncResult) (at Assets\ConnectServer.cs:183)
System.Net.Sockets.SocketAsyncResult:Complete()
System.Net.Sockets.Worker:Receive()

I don’t know why this happen while It can be Instantiate successfully when I don’t use the network.

anybody Can Help ?

In Unity3d, It cannot Instantiate object in asynchronous model ?
Could it only check the added info in Update and cannot use event to callback in asynchronous model ?

while in asynchronous model , print is not as normal can be double clicked to locate the print sententce. like follow:

I’m a tad late but I think the problem lies on the fact that, in Unity3D, you can only instantiate GameObjects from the main thread.