[英]WinRT read from infinite online stream hangs
以下代碼從URI獲取流,並使用循環將其分塊讀取。 請注意,在指定的URI后面是一個在線廣播流,這意味着沒有已知的大小。
var uri = new Uri("http://*******", UriKind.Absolute);
var http = new HttpClient();
var stream = await http.GetStreamAsync(uri);
var buffer = new byte[65536];
while (true)
{
var read = await stream.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false);
Debug.WriteLine("Read: {0}", read);
}
現在,盡管這在.NET 4.5控制台應用程序中可以正常工作,但此完全相同的代碼無法在WinRT中正常工作-它會讀取第一個塊,並且在第二次調用ReadAsync時,它將卡住並且永遠不會繼續。
如果我將URI切換到文件(已知大小),則在兩個項目中一切正常。
有小費嗎?
編輯 >請注意,此行為僅在WP8.1上發生。 我只是在SO上搜索了更多內容,發現我的問題可能是該問題的重復: WP8.1 HttpClient流僅獲得65536字節數據如果是真的,我將結束我的問題
將HttpClient.GetAsync()
與HttpCompletionOption.ResponseHeadersRead
。 當收到標頭時返回,然后執行HttpResponse.Content.ReadAsInputStreamAsync()
。
看起來您的while循環是無限的。 您如何確保它是有限的? 代替while(true)使它像這樣
var uri = new Uri("http://*******", UriKind.Absolute);
var http = new HttpClient();
var stream = http.GetStreamAsync(uri).Result;
using (var reader = new StreamReader(stream))
{
while (!reader.EndOfStream)
{
var response = reader.ReadToEnd();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.