2013-10-30 31 views
2

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

如何解決這個問題?

回答

9

但我不能從這個方法

是的,你可以返回非空值,但它必須是對一些TTaskTask<T>。所以,你可以在你的方法更改爲:

public async Task<BitmapImage> GetThumbImageFromFile(StorageFile sourceFile) 

異步方法的整個本質是,你把它和控制(通常)返回給調用者之前整個方法的主體有完成 - 因此任務被返回以指示在之後可用的結果的承諾。當控制權返回給調用者時,BitmapImage返回。通過該任務,來電者可以在可用時獲取圖像。 (通常,異步方法被其他異步方法調用,允許您等待返回的任務以獲取值)。

很難在堆棧溢出答案的空間中簡潔地描述異步,但我建議您回頭再讀一遍從頭開始的異步/等待 - 重要的是,在太過分之前瞭解它的基本性質。 MSDN async page是一個很好的起點。