14

非同期メソッドが1つあります。

public async Task<BitmapSource> GetBitmapAsync(double[] pixels);

私もこのクラスを持っているとしましょう:

public class PixelData
{
    public double[] Pixels { get; }
}

BitmapSourceここで、上記の非同期メソッドを使用して出力を生成する便利なメソッドを作成したいと思います。これを行うには少なくとも3つのアプローチを考え出すことができますが、効率と信頼性の観点からどちらを選択すべきかはすぐにはわかりません。

誰かがアドバイスできますか。次の各アプローチの長所と短所は何ですか?

オプションAResultのを返す同期メソッドを作成しますTask

public BitmapSource GetBitmap(PixelData pixelData)
{
    return GetBitmapAsync(pixelData.Pixels).Result;
}

オプションB以下を返す同期(または非同期ですか?)メソッドを作成しますTask<BitmapSource>

public Task<BitmapSource> GetBitmap(PixelData pixelData)
{
    return GetBitmapAsync(pixelData.Pixels);
}

オプションCawait:を明示的に使用する非同期メソッドを作成します

public async Task<BitmapSource> GetBitmapAsync(PixelData pixelData)
{
    return await GetBitmapAsync(pixelData.Pixels);
}
4

1 に答える 1

6

あなたはこれを考えすぎていると思います。

たまたまである型を返すメソッドがありますTask<T>。別のタイプのパラメーターを受け取り、元のメソッドにパススルーするメソッドが必要です。したがって、オプションBで問題ありません。

public Task<BitmapSource> GetBitmap(PixelData pixelData)
{
    return GetBitmapAsync(pixelData.Pixels);
}

ただし、メソッドを呼び出す必要がGetBitmapAsyncあります。

オプションAは、メソッドの同期(ブロッキング)バージョンを公開する方法です。

オプションCは、実際にはオプションB以外のことは何も達成しません。

于 2012-08-08T08:38:41.973 に答える