3

私は現在、小さなプロジェクトを開始し、JS と HTML5 の世界を体験しています。

数か月前に試してみましたが、MVC シングル ページ アプリケーションをゼロから作成する時間がなかったのでやめました。理解しなければならない概念やパターンが多すぎて、日々の仕事で使用しないためにそれらの知識をすべて失うことを後悔していたでしょう. 使うか失うか!

昨日、John Papa のブログでこの投稿を見つけたので、それを手始めに使うのは素晴らしいことだと思いました。基本的に、これはHotTowelと呼ばれる MVC テンプレートであり、データ バインディング、ミニフィケーションなどの優れた概念を既に実装しています。今のところ必要なだけコードを体験し、必要になったらすぐにさらに体験します。

私の作品の既存のデータモデルプロジェクトからデータを取得するためのアプリケーションを構築したいと思います。Silverlight アプリケーションでは、ディクショナリやその他のプロパティのプリロードと初期化、および非同期 Init()メソッドの呼び出し (たとえば、カスタム コードを含む XML ファイルをダウンロードしてディクショナリに入れるため) によってブートストラップします。MEF は、扱いにくい依存関係を取り除くために使用されます。

私が理解している限り、サーバー側の初期化はApplication_Start()Global.asax ファイルのメソッドで行う必要があります。このメソッドで非同期呼び出しをどのように待機するのだろうか? ベストプラクティスは何ですか? クライアント側での私のクエリは、これらのクラスの初期化に大きく依存しています。どのようなオプションがありますか?

私の考えは次のとおりでした。

  • Application_Start()非同期初期化プロセスを起動して忘れます。初期化が完了する前に (私が推測するコントローラーで) リクエストを実行した場合、初期化プロセスのコールバックを待って、到着したらすぐにクエリを開始する必要があります。これの利点は、ユーザーが既にアプリケーションをナビゲートできる間に、初期化が実行されることです。
  • ある種の遅延初期化を実装します。最初のリクエストが行われるとすぐに初期化を処理します。ただし、最初のリクエストには時間がかかる場合があります。
  • で初期化プロセスを同期的に実行しますApplication_Start()。これまで見てきた主な欠点は、ブラウザ ウィンドウがフリーズしているように見えることです。ユーザーが現在の初期化ステータス (ある種のスプラッシュ スクリーン) を追跡できるようにすることができれば、このソリューションに問題はありません。

具体的にどのように機能するかはわかりませんが、どのように、どこから始めればよいか、アドバイスをいただければ幸いです。

4

1 に答える 1

4

を使用しTask<MyDataModel>てデータを表すことができます。

static Task<MyDataModel> dataTask;
public static Task<MyDataModel> LoadDataModelAsync()
{
  var ret = new MyDataModel();
  await ret.Init();
  return ret;
}

Application_Start(または静的コンストラクター) で開始します。

dataTask = LoadDataModelAsync();

次に、それを必要とする各アクションawaitを完了することができます。

MyDataModel data = await dataTask;
...

すでに完了している場合、 はそれawaitを検出して続行します (同期的に)。

于 2013-02-20T18:31:33.327 に答える