我尝试使用一些使用某些等待操作的方法编写一个类。这种情况使我将此方法定义为异步。但我无法从此方法返回非void值。在我的情况下BitmapImage。这是代码
public sealed class Thumbnailer
{
public async BitmapImage GetThumbImageFromFile(StorageFile sourceFile)
{
StorageItemThumbnail thumb = await sourceFile.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.PicturesView, 600, Windows.Storage.FileProperties.ThumbnailOptions.UseCurrentScale);
IRandomAccessStream thumbStream = thumb;
BitmapImage thumbPict = new BitmapImage();
thumbPict.SetSource(thumbStream);
return thumbPict;
}
}
如何解决这个问题?
答案 0 :(得分:9)
但我无法从此方法返回非空值
是的,您可以,但某些Task
必须为Task<T>
或T
。因此,您可以将方法更改为:
public async Task<BitmapImage> GetThumbImageFromFile(StorageFile sourceFile)
异步方法的全部特性是你调用它,并且控件将(通常)在方法的整个主体完成之前返回到调用者 - 所以返回一个任务表示以后可以获得结果的承诺。当控制返回给调用者时, 没有BitmapImage
返回。通过该任务,调用者可以在 可用时获取图像。 (通常异步方法由其他异步方法调用,允许您等待返回的任务以获取值。)
很难在Stack Overflow答案的空间中简洁地描述异步,但我建议你回过头来从头开始读取异步/等待 - 重要的是你要在走得太远之前了解它的基本性质。 MSDN async page是一个很好的起点。