6

私は C# 派ではなく、Objective-C 派ですが、最近、次の実装をたくさん見てきました。

public void Method(Action<ReturnType> callback, params...)

それ以外の:

public ReturnType Method(params...)

この例の 1 つが MVVM Light Framework です。開発者は最初のアプローチを使用してデータ サービス コントラクト (および実装) を実装します。好みの問題であるか、デフォルトで非同期の最初のアプローチです(関数ポインターが与えられた場合)。それが本当なら、標準リターンデスですか?個人的には、API を見たときに 2 番目のアプローチがより明確になると思います。

4

2 に答える 2

10

を返す API とは異なり、ReturnTypeコールバックのあるバージョンはすぐに戻り、後でコールバックを実行できます。これは、返される値がすぐに利用できず、取得にかなりの遅延が伴う場合に重要になる場合があります。たとえば、Web サービスからデータを要求する API には、かなりの時間がかかる場合があります。続行するために結果データが必要ない場合は、呼び出しを開始し、非同期コールバックを提供できます。このようにして、発信者はすぐに処理を続行し、通知が利用可能になったときに通知を処理できます。

画像の URL を受け取り、画像のメモリ内表現を返す API を考えてみましょう。あなたのAPIが

Image GetImage(URL url)

ユーザーが 10 個の画像をプルする必要がある場合、各画像の読み込みが完了するまで待ってから次の画像をリクエストするか、複数のスレッドを明示的に開始する必要があります。

一方、あなたのAPIが

void Method(Action<Image> callback, URL url)

次に、API のユーザーは 10 個のリクエストすべてを同時に開始し、画像が非同期で利用可能になると画像を表示します。このアプローチにより、ユーザーが実行する必要のあるスレッド プログラミングが大幅に簡素化されます。

于 2012-06-09T14:13:15.483 に答える
3

最初のメソッドは非同期メソッドである可能性が高く、メソッドはすぐに戻り、操作が完了するとコールバックが呼び出されます。

2 番目の方法は、C# で (同期) メソッドのメソッドを返す標準的な方法です。

もちろん、API 設計者は、適切と思われる署名を自由に作成できます。また、コールバック スタイルを正当化するその他の基本的な詳細がある場合もあります。ただし、経験則として、コールバック スタイルが表示される場合は、メソッドが非同期であることを期待してください。

于 2012-06-09T14:13:43.173 に答える