Вместо этого вы можете вызвать расширение Try, оно имеет следующую подпись:
public static bool TryReceiveFrameBytes([NotNull] this IReceivingSocket socket, TimeSpan timeout, out byte[] bytes)
Это позволит вам передать TimeSpan.Zero
как timeout
, что сделает его неблокирующим вызовом.,С while(true)
это будет работать нормально, но вам, вероятно, потребуется добавить туда Task.Delay
или Thread.Sleep
.Task.Delay
будет работать лучше, так как принимает CancellationToken
.Этот токен можно отменить из другого потока, чтобы быстро выйти из цикла.Что-то вроде этого:
private void ReceiveData(CancellationToken cancellationToken)
{
while (true)
{
bool receivedTopicMessage = SubSocket.TryReceiveFrameBytes(TimeSpan.Zero, out byte[] messageTopicReceived);
bool receivedMessage = SubSocket.TryReceiveFrameBytes(TimeSpan.Zero, out byte[] messageReceived);
Task.Delay(1000, cancellationToken);
if (cancellationToken.IsCancellationRequested)
{
return;
}
}
//Code that uses byte array and do stuff
}