Согласно этой проблеме, вы не первый, кто получил эту ошибку.
Похоже, что при использовании многопоточности в библиотеке TLSharp возникли проблемы с запросом / ответом.
Существует один стабильный обходной путь для таких проблем.
Сделайте все запросы на загрузку синхронными
На самом деле они будут асинхронными, но с одной задачей в одном. время доступа
Это грязное, но выполнимое решение может быть достигнуто путем создания очереди задач :
public class TaskQueue
{
private readonly SemaphoreSlim _semaphoreSlim;
public TaskQueue()
{
_semaphoreSlim = new SemaphoreSlim(1, 1); // Max threads limited to 1.
}
public async Task<T> Enqueue<T>(Func<Task<T>> taskGenerator)
{
await _semaphoreSlim.WaitAsync();
try
{
return await taskGenerator();
}
finally
{
_semaphoreSlim.Release();
}
}
public async Task Enqueue(Func<Task> taskGenerator)
{
await _semaphoreSlim.WaitAsync();
try
{
await taskGenerator();
}
finally
{
_semaphoreSlim.Release();
}
}
}
Теперь вы должны зарегистрировать очередь как singleton в Startup.cs
файле, чтобы убедиться, что ваше основное приложение asp. net использует одну очередь задач экземпляр для выполнения загрузки на серверы телеграммы:
public void ConfigureServices(IServiceCollection services)
{
//...
services.AddSingleton<TaskQueue>();
//...
}
Далее, получите свой экземпляр очереди задач в конструкторе вашего контроллера API, например:
private readonly TaskQueue taskQueue;
public MyController(TaskQueue taskQueue)
{
this.taskQueue = taskQueue
}
Затем просто используйте его во всех ваших методах API:
// Code from your API method...
await taskQueue.Enqueue(() => client.SendUploadedDocument(bot, fileResult, "caption", mime, attr));
Это сделает все запросы к серверам телеграмм. через TLSharp librar y синхронны и предотвращают проблемы многопоточности, как в вопросе.
Если честно, это всего лишь обходной путь , а не решение этой проблемы. Я уверен, что эта проблема на github об ошибке контрольной суммы должна быть исследована более подробно и исправлена, если это возможно.