From 04e043222e7ab7f888727f77c9d6f7bb21c0b314 Mon Sep 17 00:00:00 2001
From: Wizou <11647984+wiz0u@users.noreply.github.com>
Date: Tue, 24 Jun 2025 19:11:14 +0200
Subject: [PATCH] ParallelTransfers property can configure how many parallel
download/upload of file chunks can occur at the same time. Default is 2
(optimal for non-premium accounts), was 10 in previous versions.
---
src/Client.cs | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/src/Client.cs b/src/Client.cs
index 222c6f6..fa8f430 100644
--- a/src/Client.cs
+++ b/src/Client.cs
@@ -59,6 +59,18 @@ namespace WTelegram
public long UserId => _session.UserId;
/// Info about the current logged-in user. This is only filled after a successful (re)login, not updated later
public User User { get; private set; }
+ /// Number of parallel transfers operations (uploads/downloads) allowed at the same time.
+ /// Don't use this property while transfers are ongoing!
+ public int ParallelTransfers
+ {
+ get => _parallelTransfers.CurrentCount;
+ set
+ {
+ int delta = value - _parallelTransfers.CurrentCount;
+ for (; delta < 0; delta++) _parallelTransfers.Wait();
+ if (delta > 0) _parallelTransfers.Release(delta);
+ }
+ }
private Func _config;
private readonly Session _session;
@@ -83,7 +95,7 @@ namespace WTelegram
private int _reactorReconnects = 0;
private const string ConnectionShutDown = "Could not read payload length : Connection shut down";
private const long Ticks5Secs = 5 * TimeSpan.TicksPerSecond;
- private readonly SemaphoreSlim _parallelTransfers = new(10); // max parallel part uploads/downloads
+ private readonly SemaphoreSlim _parallelTransfers = new(2); // max parallel part uploads/downloads
private readonly SHA256 _sha256 = SHA256.Create();
private readonly SHA256 _sha256Recv = SHA256.Create();
#if OBFUSCATION
@@ -209,7 +221,7 @@ namespace WTelegram
if (_tcpClient != null) throw new InvalidOperationException("Cannot switch to HTTP after TCP connection");
_httpClient = httpClient ?? new();
_httpWait = defaultHttpWait;
- while (_parallelTransfers.CurrentCount > 1) _parallelTransfers.Wait();
+ ParallelTransfers = 1;
}
/// Disconnect from Telegram (shouldn't be needed in normal usage)