写真をボットに送信するためのコードを以下に記述しましたが、ストリームでは読み取りと書き込みの2つの例外があり、写真は送信されませんでした。
おそらくこの理由はこのエラーだったと思いますが、修正できませんでした。
stream.ReadTimeout
タイプ '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));
}
この例外の理由は、おそらくタスクを開始した直後にDispose
stream
であるためです。
using
ステートメントは、実行がこのブロックを離れるときに、Dispose
インスタンスでstream
を呼び出します。このusing
ステートメントを削除するか、またはメソッドがすでにasync
である場合は、SendPhotoAsync()
への呼び出しを単にawait
することができます。 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);
}
_
このawait
呼び出し用にコンパイラーによって作成されたステートマシンは、finally
ステートメントのusing
ブロック(stream.Dispose()
が呼び出される)を処理しますTask
によって返されたSendPhotoAsync
が完了した後にのみ実行されます。