C# 如何创建可以返回非void值的异步方法?
我尝试用使用一些等待操作的方法编写一个类。此条件使我将此方法定义为async。但是我不能从这个方法返回非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
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,在走得太远之前理解其基本性质是很重要的。这是一个很好的起点