Рекомендуемая сигнатура метода при возврате вывода из асинхронного метода?

У меня есть один асинхронный метод:

public async Task<BitmapSource> GetBitmapAsync(double[] pixels);

Допустим, у меня тоже есть этот класс:

public class PixelData
{
    public double[] Pixels { get; }
}

Теперь я хочу создать удобный метод, производящий вывод BitmapSource, используя описанный выше асинхронный метод для выполнения работы. Я могу придумать как минимум три подхода для этого, но мне не сразу очевидно, какой из них выбрать с точки зрения эффективности и надежности.

Может кто-нибудь посоветовать; каковы преимущества и недостатки каждого из следующих подходов?

Вариант АСоздайте синхронный метод, который возвращает Resultиз Task:

public BitmapSource GetBitmap(PixelData pixelData)
{
    return GetBitmapAsync(pixelData.Pixels).Result;
}

. Вариант БСоздать синхронный (или он асинхронный? )метод, который возвращаетTask<BitmapSource>:

public Task<BitmapSource> GetBitmap(PixelData pixelData)
{
    return GetBitmapAsync(pixelData.Pixels);
}

Вариант ССоздайте асинхронный метод, который явно используетawait:

public async Task<BitmapSource> GetBitmapAsync(PixelData pixelData)
{
    return await GetBitmapAsync(pixelData.Pixels);
}
14
задан Anders Gustafsson 8 August 2012 в 08:02
поделиться