0

この HTTPHandler が機能しないのはなぜですか? getPageBody と getPageContent の両方が永遠に待機し、私に戻ってくることはありません。await の後は何も起こりません (ブレークポイントを使用)。

どんな助けでも大歓迎です!

PS: ブラウザーでページにアクセスしても機能するため、問題は C# 側にあるはずです。

public class HTTPHandler
{
    public static async Task<List<String>> getPageBody(String page)
    {
        WebRequest request = WebRequest.Create(
          "http://www.mywebsite.com/dev/api/" + page);
        request.Credentials = CredentialCache.DefaultCredentials;
        WebResponse response = await request.GetResponseAsync();
        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        string responseFromServer = reader.ReadToEnd();
        //reader.Close();
        //response.Close();

        return responseFromServer.Split(';').ToList();
    }

    public static async Task<List<String>> getPageContents(String page)
    {
        HttpClient client = new HttpClient();            
        Task<HttpResponseMessage> resp;
        await (resp = client.GetAsync("http://www.mywebsite.com/dev/api/" + page)).ContinueWith(
            (getTask) =>
            {
                getTask.Result.EnsureSuccessStatusCode();
            });
        //HttpResponseMessage resp = await client.GetAsync("http://mywebsite.com/dev/api/" + page);


        Task<String> responseBodyAsText = resp.Result.Content.ReadAsStringAsync();
        responseBodyAsText.Wait();
        return responseBodyAsText.Result.Split(';').ToList();
    }
}
4

1 に答える 1

0

コール スタックのさらに上で、Task.Waitorを使用していると思われますTask.Result

WaitコードでまたはResultを使用するasyncと、デッドロックのリスクが発生します。これについては、私のブログ最近の MSDN の記事で詳しく説明しています。

于 2013-04-27T11:50:54.390 に答える