//[MethodImpl(MethodImplOptions.AggressiveInlining)] private async ValueTask RunWithTimeout(Func <CancellationToken, ValueTask> action, CancellationToken originalCancellationToken) { originalCancellationToken.ThrowIfCancellationRequested(); var cancellationTokenWithTimeout = CancellationTokenHelper.CancellationTokenWithTimeout(ClientConfig.Timeout, originalCancellationToken); try { await action.Invoke(cancellationTokenWithTimeout.Token); } catch (OperationCanceledException operationCanceledException) { throw TimeoutOrCancelledException(operationCanceledException, originalCancellationToken); } catch (SocketException socketException) { if (socketException.InnerException?.GetType().IsAssignableFrom(typeof(OperationCanceledException)) == true) { throw TimeoutOrCancelledException(socketException.InnerException, originalCancellationToken); } throw; } finally { cancellationTokenWithTimeout.Dispose(); } }