如何创建一个可以返回非void值的异步方法?

时间:2013-10-30 08:22:30

标签: c# .net-4.5

我尝试使用一些使用某些等待操作的方法编写一个类。这种情况使我将此方法定义为异步。但我无法从此方法返回非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;
    }
}

如何解决这个问题?

1 个答案:

答案 0 :(得分:9)

  

但我无法从此方法返回非空值

是的,您可以,但某些Task必须为Task<T>T。因此,您可以将方法更改为:

public async Task<BitmapImage> GetThumbImageFromFile(StorageFile sourceFile)

异步方法的全部特性是你调用它,并且控件将(通常)在方法的整个主体完成之前返回到调用者 - 所以返回一个任务表示以后可以获得结果的承诺。当控制返回给调用者时, 没有BitmapImage返回。通过该任务,调用者可以在 可用时获取图像。 (通常异步方法由其他异步方法调用,允许您等待返回的任务以获取值。)

很难在Stack Overflow答案的空间中简洁地描述异步,但我建议你回过头来从头开始读取异步/等待 - 重要的是你要在走得太远之前了解它的基本性质。 MSDN async page是一个很好的起点。