using (HttpClient client = new HttpClient())
{
client.Timeout = Timeout.InfiniteTimeSpan;
using (var stream = await client.GetStreamAsync(url).ConfigureAwait(false))
using (var reader = new StreamReader(stream))
{
while (!reader.EndOfStream)
{
var task = reader.ReadLineAsync();
if (task.Wait(3000))
{
/*通常の処理*/
}
else
{
/*タイムアウト時の処理*/
break;
}
}
}
}

HTTPでのストリーミング受信をこのような感じで受け取るようにしました。
無通信が一定期間(上記だと3秒)あればタイムアウトさせているつもりなのですが、
3秒以上の無通信期間をHTTPホスト側で設けてみても、いっこうにタイムアウトせずに待ち続けています。
task.Wait()の代わりにTask.WaitAny()やTask.WhenAny()なども試してみましたが、
タイムアウト側へ処理が行かないのです。
もっと単純にvar task = Task.Delay(5000);ってやると、タイムアウト側へ処理が流れます。
HttpClientの時だけうまくいかない?
HTTPホスト側のスクリプトはPHPで待機時間を1秒ずつsleep()時間を増やしながらループさせていて、
ホスト側はまず間違いないと思っています。
よろしくお願いします。