gpt4 book ai didi

c# - 如何创建一个可以返回非空值的异步方法?

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:42 24 4
gpt4 key购买 nike

我尝试编写一个类,其方法使用一些可等待的操作。这种情况使我将此方法定义为异步。但是我不能从这个方法返回非空值。在我的例子中是 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;
}
}

如何解决这个问题?

最佳答案

But I can't return non-void value from this method

可以,但必须是 TaskTask<T>对于一些 T .所以你可以改变你的方法:

public async Task<BitmapImage> GetThumbImageFromFile(StorageFile sourceFile)

异步方法的全部本质是您调用它,控制权(通常)会在方法的整个主体完成之前返回给调用者 - 因此返回一个任务表示稍后结果可用的 promise 。当控制权返回给调用者时, 没有 BitmapImage回来。通过该任务,调用者可以在图像 可用时获取图像。 (通常异步方法会被其他异步方法调用,当然,这允许您等待返回的任务以获取值。)

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

关于c# - 如何创建一个可以返回非空值的异步方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19677117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com