await の最初のニュースを見たとき、私はとても興奮し、さまざまな使い方を考えました。これらの 1 つは、いくつかのフレームワークで行われているように、クライアント/サーバー交換の非同期の側面を隠すために、私の Web フレームワークで使用することです。だからここに契約があります:
以下のようなことを書きたいと思います。
{
Page p = new Page();
FormResponse response = await p.Show();
var field1 = reponse.inputField["input1"];
...
}
開発者がサーバー上でこのコードを記述できるようにしたいと考えています。ご想像のとおりp.Show()
、HttpResponse に、フォームを含むページを表示する html コードを記述し、応答をクライアントに送信すると、スレッドが強制終了され、次の命令 ( FormResponse response =
) に到達しません。
だからここに私の質問があります:そのようなことをする方法はありますか?コードを切り取り、継続にパックし、クロージャを作成し、p.Show() が完了したときにコールバックするためにどこかに保存することを知っています。しかし、ここでは、スレッドが強制終了されます。これは、処理する必要がある Page から送信応答を受信する私のコードです。そのため、「await」が作成した継続を復元し、自分で実行する必要があります。
私はハイになっていますか、それとも可能ですか?
編集:追加情報
もう少し説明できますが、例が必要です。Web サービスへの非同期呼び出しを行いたいと想像してください。await を使用してから Web を呼び出すだけです。Web ではページが表示されず、情報が返され、次の手順に進むことができます。Web では次のようになります。クライアント -> サーバー A [-callwebs-> サーバー B ->] サーバー A -> クライアント。
ここで、ユーザーから情報を取得するためにユーザー インターフェイスを表示する必要がある Web を想像してください。この種の Web を UIweb (複数の Web アプリケーションによって呼び出される再利用可能なインターフェイス) と呼び、UI を表示し、情報を取得し、送信します。呼び出し元に戻します。
クライアント -> サーバー A [-response_redirect-> クライアント -get-> サーバー B (ここに UIweb があり、クライアントは何でも入力します) -response_redirect-> クライアント -get-> ] サーバー A ->クライアント
括弧の間に入れたものは、開発者が処理する必要があります:
したがって、従来の Web の場合、非同期ページが Web の応答を待って「スリープ状態」になっていると想像できますが、UI Web では応答してクライアントにリダイレクトする必要があるため、ページは asp.net 用に作成され、SynchronizationContext は次のように述べています。待機する非同期命令がもうないことを確認します。
実際、ここでの私の必要性は、Web サーバーをオンにして、await の直後にコードを実行するために必要なすべてを復元する要求を Web サーバーに送信することと同じです。
よろしく、ジュリアン