3

次のように、HttpClient を介して HTML をプルするメソッドがあります。

public static HttpClient web = new HttpClient();
public static async Task<string> GetHTMLDataAsync(string url)
{                    
    string responseBodyAsText = "";
    try
    {
       HttpResponseMessage response = await web.GetAsync(url);
       response.EnsureSuccessStatusCode();
       responseBodyAsText = await response.Content.ReadAsStringAsync();
    }
    catch (Exception e)
    {
       // Error handling
    }

    return responseBodyAsText;
}

次のような別の方法があります。

private void HtmlReadComplete(string data)
{
    // do something with the data
}

GetHTMLDataAsync を呼び出して、HTML が読み取られたときに UI スレッドで HtmlReadComplete を呼び出せるようにしたいと考えています。私は単純に、これは次のようなもので何とかできると考えました

GetHTMLDataAsync(url).ContinueWith(HtmlReadComplete);

しかし、正しい構文を取得できません。また、それが適切な処理方法であるかどうかもわかりません。

前もって感謝します!

4

2 に答える 2

1
public async void ProcessHTMLData(string url)
{
    string HTMLData = await GetHTMLDataAsync(url);
    HTMLReadComplete(HTMLData);
}

あるいは

public async void ProcessHTMLData(string url)
{
    HTMLReadComplete(await GetHTMLDataAsync(url));
}
于 2012-10-25T07:31:59.983 に答える
1

あなたは近いですが、パラメーターとしてContinueWith()デリゲートを取るTaskので、次のことができます:

GetHTMLDataAsync(url).ContinueWith(t => HtmlReadComplete(t.Result));

通常、 が終了していない場合はブロックされるため、Resultと一緒に使用する場合は注意が必要です。しかし、この場合、確実にが完了していることがわかるので、ブロックしません。asyncResultTaskTaskResult

于 2012-10-27T17:16:18.343 に答える