Вложенные асинхронные/ожидающие методы

Я пишу библиотеку, которая оборачивает вызов стороннего веб-сервиса, и пытаюсь заставить библиотеку использовать новые функции async/await. Как правильно использовать ключевые слова async/await в следующем примере?

public class MyApi
{
    public Task<ApiResult> DoSomethingAsync()
    {
        return this.DoSomethingCore();
    }

    public async Task<ApiResult> DoSomethingElseAsync()
    {
        return await this.DoSomethingCore();
    }

    private async Task<ApiResult> DoSomethingCore()
    {
        var httpClient = new HttpClient();
        var httpResponseMessage = await httpClient.GetAsync("some url");
        var rawResultText = await httpResponseMessage.Content.ReadAsStringAsync();
        return new ApiResult(rawResultText);        
    }
}

Чтобы позволить моему вызывающему объекту ожидать метод DoSomethingAsync, должен ли этот метод также иметь добавленные к нему ключевые слова async и await? Или это нормально, как -, потому что он возвращает задачу? Есть ли лучший шаблон для такого вложения?

Я думаю, что метод DoSomethingAsync — правильный путь, верно? Я считаю, что DoSomethingElseAsync кажется неправильным подходом при создании библиотеки.

15
задан svick 21 January 2013 в 14:00
поделиться