And*_*son 14 .net c# async-await async-ctp windows-runtime
我有一个异步方法:
public async Task<BitmapSource> GetBitmapAsync(double[] pixels);
Run Code Online (Sandbox Code Playgroud)
假设我也有这个课程:
public class PixelData
{
public double[] Pixels { get; }
}
Run Code Online (Sandbox Code Playgroud)
我现在想要创建一个生成BitmapSource输出的方便方法,使用上面的异步方法来完成工作.我可以提出至少三种方法来做到这一点,但对于我来说,从效率和可靠性的角度来看,我应该选择哪一种方法.
有人可以建议; 以下每种方法的优点和缺点是什么?
选项A创建一个返回以下内容Result的同步方法Task:
public BitmapSource GetBitmap(PixelData pixelData)
{
return GetBitmapAsync(pixelData.Pixels).Result;
}
Run Code Online (Sandbox Code Playgroud)
选项B创建一个返回Task<BitmapSource>以下内容的同步(或它是异步?)方法:
public Task<BitmapSource> GetBitmap(PixelData pixelData)
{
return GetBitmapAsync(pixelData.Pixels);
}
Run Code Online (Sandbox Code Playgroud)
选项C创建一个显式使用的异步方法await:
public async Task<BitmapSource> GetBitmapAsync(PixelData pixelData)
{
return await GetBitmapAsync(pixelData.Pixels);
}
Run Code Online (Sandbox Code Playgroud)
我觉得你在想这个.
你有一个方法返回恰好是一个类型Task<T>.您需要一种方法,该方法采用不同类型的参数并传递给原始方法.因此选项B很好:
public Task<BitmapSource> GetBitmap(PixelData pixelData)
{
return GetBitmapAsync(pixelData.Pixels);
}
Run Code Online (Sandbox Code Playgroud)
应该调用该方法GetBitmapAsync.
选项A将是公开方法的同步(阻塞)版本的方法.
选项C实际上没有达到比选项B更多的功能.