言語の前に:現在APIインタフェースの呼び出しを通じてフロントエンドコンポーネントベースの開発VUEを行うためにプロジェクトに取り組んで、バックエンドのデータ・ロジックは、C#のWCFサービスに実装されています
重要なクラスのタスクを達成するために待っています(このクラスは、前のTheradに非常によく似ている)で4.5のC#.NETの非同期の後に彼の新しい非同期モードを総括1
1.1最初の非同期が変性剤である、方法が戻り値、タスク<TResult>は、戻り値の型として使用することができるかどうかを2例に分けることができるため、それだけで、署名方式またはイベントハンドラであることができます
例えば:
プライベート 非同期タスクTest_one_async()//これは非戻り値非同期方式である
プライベート 非同期タスク< 文字列 > Test_two_async()//この戻り値がクラス型の文字列ですが非同期メソッドである
プライベート 非同期 無効 Test_two_async()//これは非同期イベントハンドラ
1.2は、オペレータが、それは非同期実行の結果を待つことを示して待っています。オペレータが実際すなわちタスク<TResult>操作ではなく、操作自体の方法のために、戻り値を操作している待つと理解することができます。
次のようにシステムはいくつかの種類、I文言の対応するキャッシュを更新し、現在のビジネスニーズの後に例:(についてDBの操作である、という考えは)完全なDBキャッシュでは、インタフェースが動作し続けることができる非同期操作に対処することです
1つの 公共タスク< 動的 > doCacheMoudel(いるFormData FORMDATA)
2 {
3。 文字列データ;
4 formData.TryGetValue(" データ"、OUTデータ); // これは、パラメータ変換である
5。 AjaxMessge MSG = 新しい新しいAjaxMessge();
6 BOOLモデル= updateMoudelDB (データ); // データベース更新動作
7。 IF (モデル)
8 {
9。 msg.Set(MsgType.Success、" 成功した" );
10 Task.Runは(()=> {
11。 todoCacheInfo(); // キャッシュ更新する方法に対応する
12である });
13である }
14 他の
15 {
16 msg.Set(MsgType.Error、" 失敗" );
17 }
18は、 リターン GenRet.Msg(MSG、"" );
19 }
上記の特定のシーンに適用される、いくつかのシーンは、非同期を使用する必要があり、例えば、我々はキャッシュを更新するために、すべてのデータを取得したい、解決するために待って、私たちはキャッシュの更新に戻るまであなたは待つ必要があり、この時間が完了しているキャッシュを更新することにより、このデータこれは多少時間がかかることがあり、それは同期のと、顧客体験にUIインターフェースケイトン現象ではなく、良い感覚を引き起こす前に、種類に応じていません。
1つの 公共 非同期タスク< 動的 > doCacheMoudel(いるFormData FORMDATA)
2 {
3。 文字列データ;
4 formData.TryGetValue(" データ"、OUTデータ); // これは、パラメータ変換である
。5 AjaxMessge MSG = 新しい新しいAjaxMessge();
6 BOOLのモデル= updateMoudelDB(データ); // データベース更新動作
7。 IF (モデル)
8 {
9。 タスク< ストリング >タスク1 = todoCacheInfo();
10 文字列値= のawait、タスク1 // キャッシュ更新待機の戻り値
11。 msg.Set(MsgType.Success、値);
12である }
13は、 他の
14 {
15 msg.Set(MsgType.Error、"" );
16 }
17 リターン GenRet.Msg(MSG、"" );
18です }
ここでは、キャッシュの更新が遅れて変更が求められていた見つけ、キャッシュを更新した後、我々はこのキャッシュの更新と更新に関する追加情報に対処する必要があります。人気のことわざが完了Bを実行し、ここで使用達成することができます待つ、達成するための方法タスクContinueWithがあります
1 public async Task<string> todoThing() 2 { 3 /* 4 await doA();//执行A 5 doB();//A执行完成后才会执行B 6 */ 7 8 /* 9 string str1 = await doA();//获取A执行完的结果 10 doB();//获取A执行完的结果后执行B 11 */ 12 13 /* 14 await doA().ContinueWith(test => 15 { 16 doB();//A执行完后开始执行B,test为A的返回值 17 }); 18 */ 19 return ""; 20 } 21 private async Task<string> doA() 22 {
//todosomething() 23 return "A"; 24 } 25 private int doB() 26 {
//todo() 27 return 1; 28 }
以上学习的是异步的一个普遍使用方式,后面再vue的异步学习中发现有很多的类似的地方,如下:
2.vue中promise对象和异步思想(ES2017 标准引入了 async 函数,使得异步操作变得更加方便)
2.1 提一下,ES6 规定,Promise
对象是一个构造函数,用来生成Promise
实例,Promise
构造函数接受一个函数作为参数,该函数的两个参数分别是resolve
和reject
。它们是两个函数,由 JavaScript 引擎提供,不用自己部署
具体作用大家可以看一下这个链接上的讲解