Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

'stream.ReadTimeout' threw an exception of type 'System.InvalidOperationException' sending photo to telegram bot

I wrote below code for sending a photo to my bot, but in my stream, I have two exceptions for read and write and my photo was not send.

I think maybe the reason was this error, but I couldn't fix it:

stream.ReadTimeout threw an exception of type 'System.InvalidOperationException'

using (var stream = System.IO.File.Open("a.jpg", FileMode.Open))
{
    var fileToSend = new FileToSend("a.jpg", stream);
    Task.Run(() => bot.SendPhotoAsync(u.Message.Chat.Id, fileToSend).ConfigureAwait(false));
}
like image 812
Maryam Ghafarinia Avatar asked Mar 28 '17 12:03

Maryam Ghafarinia


1 Answers

The reason for this exception is probably that you Dispose the stream immediatly after starting the task.

The using statement calls Dispose on the stream instance when execution leaves this block. You can either remove this using statement or - if your method already is async - you may simply await the call to SendPhotoAsync(). There is no reason to use another thread with Task.Run():

using (var stream = System.IO.File.Open("a.jpg", FileMode.Open))
{
    var fileToSend = new FileToSend("a.jpg", stream);
    await bot.SendPhotoAsync(u.Message.Chat.Id, fileToSend).ConfigureAwait(false);
}

The state-machine created by the compiler for this await call takes care that the finally block of the using statement (where stream.Dispose() will be called) is executed only after the Task returned by SendPhotoAsync has completed.

like image 59
René Vogt Avatar answered Nov 20 '22 13:11

René Vogt