Leitura de porta serial assíncrona em C #

Eu tenho uma classe que lê da porta serial usando o manipulador de eventos DataReceived em C #. Quando recebo dados, sei que o cabeçalho terá 5 bytes, portanto, não quero fazer nada com os dados até ter pelo menos isso. Meu código atual está abaixo:

while (serialPort.BytesToRead<5)
{
//Do nothing while we have less bytes than the header size
}

//Once at least 5 bytes are received, process header

Pelo que entendi, esse código está bloqueando e precisa ser aprimorado. Estou procurando sugestões sobre como fazer isso. Outro manipulador de eventos dentro do manipulador de eventos DataReceived seria apropriado?

questionAnswers(2)

yourAnswerToTheQuestion