从异步方法返回输出时推荐的方法签名?

时间:2012-08-08 08:02:19

标签: c# .net windows-runtime async-await async-ctp

我有一个异步方法:

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

让我们说我也有这个课程:

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

我现在想要创建一个生成BitmapSource输出的便捷方法,使用上面的异步方法来完成工作。我可以提出至少三种方法来做到这一点,但对于我来说,从效率和可靠性的角度来看,我应该选择哪一种方法。

有人建议吗?以下每种方法的优点和缺点是什么?

选项A 创建一个返回Result的{​​{1}}的同步方法:

Task

选项B 创建一个返回public BitmapSource GetBitmap(PixelData pixelData) { return GetBitmapAsync(pixelData.Pixels).Result; } 的同步(或它是异步?)方法:

Task<BitmapSource>

选项C 创建一个明确使用public Task<BitmapSource> GetBitmap(PixelData pixelData) { return GetBitmapAsync(pixelData.Pixels); } 的异步方法:

await

1 个答案:

答案 0 :(得分:6)

我认为你过度思考了这一点。

你有一个方法可以返回恰好是Task<T>的类型。您需要一种方法,该方法采用不同类型的参数并传递给原始方法。因此选项B很好:

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

该方法应该被称为GetBitmapAsync

选项A将是公开方法的同步(阻塞)版本的方法。

选项C实际上没有达到比选项B更多的东西。