Arduino serial delegate help

So I have a script reading values using SerialPort from Arduino in Update, which I’ve heard is actually incorrect due to the frame lag it causes. One solution to reading data asynchronously that I’ve seen is to use a delegate for DataReceived, but I can’t quite work it out and I can’t find any good tutorials to explain it step by step. Could you guys please help me figure this out? I’ll leave the code below. Also, the Unity version I’m using is 2018.4.12 (SerialPort apparently disappeared from the latest versions). Thanks in advance!

SerialPort myport = new SerialPort("COM4", 9600);

    private string arduinoData;
    private string[] sensorsText;
    private int[] flexValues = new int[5];

    private GameManager4 gameManager;

    // Start is called before the first frame update
    void Start()
    {
        myport.Open();

        gameManager = GameObject.Find("GameManager").GetComponent<GameManager4>();
    }

    // Update is called once per frame
    void Update()
    {
        if (myport.IsOpen)
        {
            ReadData();

            //do stuff
        }

    }

    private void ReadData()
    {
        arduinoData = myport.ReadLine();
        myport.ReadTimeout = 25; //wrong approach apparently
        sensorsText = arduinoData.Split(',');

        for (int i = 0; i < 5; i++) //only need the first 5 values
        {
            try
            {
                flexValues _= int.Parse(sensorsText*);*_

}
catch(System.FormatException e)
{
break;
}
}
}

I eventually solved this problem using threads

    Thread t;

    void Start()
    {
        myport.Open();

        t = new Thread(ReadDataThread);
        t.Start();
    }

    void Update()
    {
        if (myport.IsOpen)
        {
            //do stuff
        }
    }

void ReadDataThread()
    {
        while (myport.IsOpen)
        {
            arduinoData = myport.ReadLine();
        }
    }

//always stop thread
    public void OnApplicationQuit()
    {
        t.Abort();
    }