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

C# 如何创建可以返回非void值的异步方法?,c#,.net-4.5,C#,.net 4.5,我尝试用使用一些等待操作的方法编写一个类。此条件使我将此方法定义为async。但是我不能从这个方法返回非void值。在我的情况下是位图图像。这是密码 public sealed class Thumbnailer { public async BitmapImage GetThumbImageFromFile(StorageFile sourceFile) { StorageItemThumbnail thumb = await sourceFile.GetThu

我尝试用使用一些等待操作的方法编写一个类。此条件使我将此方法定义为async。但是我不能从这个方法返回非void值。在我的情况下是位图图像。这是密码

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;
    }
}
如何解决这个问题

但是我不能从这个方法返回非void值

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

public async Task<BitmapImage> GetThumbImageFromFile(StorageFile sourceFile)
公共异步任务GetThumbImageFromFile(StorageFile sourceFile) 异步方法的全部性质是调用它,并且控制(通常)将在方法的整个主体完成之前返回给调用方-因此返回一个任务以指示稍后结果可用的承诺。当控件返回到调用方时,没有
BitmapImage
可返回。通过该任务,调用方可以在图像可用时获取图像。(通常异步方法由其他异步方法调用,当然,允许您等待返回的任务获取值。)

很难在堆栈溢出答案的空间中简洁地描述异步,但我建议您重新开始阅读async/Wait,在走得太远之前理解其基本性质是很重要的。这是一个很好的起点