簡體   English   中英

如何創建一個可以返回非空值的異步方法?

[英]How to create an async method that can return the non-void value?

我嘗試編寫一個使用一些等待操作的方法的類。 這種情況使我將此方法定義為異步。 但是我不能從這種方法返回非空值。 在我的情況下是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;
    }
}

如何解決這個問題?

但是我不能從這種方法返回非空值

是的,可以,但是對於某些T ,它必須是TaskTask<T> 因此,您可以將方法更改為:

public async Task<BitmapImage> GetThumbImageFromFile(StorageFile sourceFile)

異步方法的全部性質是您可以調用它,並且控制(通常)將在該方法的整個主體完成之前返回給調用者-因此,將返回一個任務,以表明以后可以得到結果的承諾 通過時間控制返回給調用者, 沒有任何BitmapImage返回。 與任務, 可用時調用者可以獲取圖像。 (通常,異步方法是由其他異步方法調用的,當然,您可以等待返回的任務來獲取值。)

在Stack Overflow答案中很難簡潔地描述async,但是我建議您回過頭來重新從頭開始閱讀async / await-重要的是,您應該先了解其基本性質,然后再進行深入研究。 MSDN異步頁面是一個很好的起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM