簡體   English   中英

從無限在線流讀取的WinRT掛起

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM