Escribí a continuación el código para enviar una foto a mi bot, pero en mi transmisión, tengo dos excepciones para leer y escribir y mi foto no se envió.
Creo que tal vez la razón fue este error, pero no pude solucionarlo:
stream.ReadTimeoutlanzó una excepción de tipo '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)); }El motivo de esta excepción es probablemente que Dispose la stream inmediatamente después de iniciar la tarea.
La declaración de using llama a Dispose en la instancia de stream cuando la ejecución abandona este bloque. Puede eliminar esta declaración de using o, si su método ya es async , puede simplemente await la llamada a SendPhotoAsync() . No hay razón para usar otro hilo con 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); } La máquina de estado creada por el compilador para esta llamada de await se encarga de que el bloque finally de la declaración de using (donde se llamará a stream.Dispose() ) se ejecute solo después de que se haya completado la Task devuelta por SendPhotoAsync .