14

我有一种异步方法:

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

假设我也有这个类:

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

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

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

选项 A创建一个返回的同步Result方法Task

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

选项 B创建一个同步(还是异步?)方法,该方法返回Task<BitmapSource>

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

选项 C创建一个显式使用的异步方法await

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

1 回答 1

6

我觉得你想多了。

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

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

该方法应该被调用GetBitmapAsync

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

选项 C 实际上并没有实现比选项 B 更多的任何东西。

于 2012-08-08T08:38:41.973 回答