Эмуляция таймаута записи в сокет C#
Имеется socket-клиент вот с такой функцией отправки данных:
private async Task InternalWriteMessageAsync(byte[] data)
{
try
{
using CancellationTokenSource timeoutCts = new(_options.SendTimeout);
// _clientStream - это NetworkStream
await _clientStream.WriteAsync(data.AsMemory(), timeoutCts.Token).ConfigureAwait(false);
}
catch (Exception ex)
{
...
}
}
В ней используется CancellationToken для отмены операции через определенное время. По аналогии с этой функцией сделано чтение данных, и отмена по таймауту успешно работает. Протестировать отмену по таймауту при записи никак не получается. Большой объем передаваемых данных, маленький буфер сокета, медленное чтение, обрыв соединения не помогает эмулировать ситуацию с длительной записью в сокет.
Возможно ли эмулировать такую ситуацию на практике?
Класс-обертку с Task.Delay в функции WriteAsync я могу написать, но хотелось бы протестировать код в реальной ситуации, чтобы на 100% убедится, что все работает корректно.
P.S. таймауты для сокета установлены:
Socket socket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
{
SendBufferSize = _options.SendBufferSize,
ReceiveBufferSize = _options.ReceiveBufferSize,
SendTimeout = (int)_options.SendTimeout.TotalMilliseconds,
ReceiveTimeout = (int)_options.ReceiveTimeout.TotalMilliseconds
};