2

いくつかの待機可能な操作を使用するメソッドでクラスを作成しようとしています。この条件により、このメソッドを非同期として定義する必要があります。しかし、このメソッドから非 void 値を返すことはできません。私の場合は 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;
    }
}

これを修正する方法は?

4

1 に答える 1

10

しかし、このメソッドから非 void 値を返すことはできません

はい、できますが、Taskまたはある必要Task<T>がありTます。したがって、メソッドを次のように変更できます。

public async Task<BitmapImage> GetThumbImageFromFile(StorageFile sourceFile)

非同期メソッドの全体的な性質は、それを呼び出すことであり、メソッドの本体全体が完了する前に、(通常) コントロールが呼び出し元に返されます。そのため、結果が後で利用可能になるという約束を示すためにタスクが返されます。オン。コントロールが呼び出し元に戻るまでに、戻るものはありませんBitmapImage。タスクを使用すると、呼び出し元は画像が利用可能になったときにそれを取得できます。(多くの場合、非同期メソッドは他の非同期メソッドによって呼び出され、値を取得するために返されたタスクを待機できます。)

スタック オーバーフローの回答のスペースで async を簡潔に説明することは困難ですが、戻って async/await を最初から読み直すことをお勧めします。やりすぎる前に、その基本的な性質を理解することが重要です。MSDNの非同期ページは出発点として適しています。

于 2013-10-30T08:23:29.180 に答える