同步驟用和異步驟用WebService。本站提示廣大學習愛好者:(同步驟用和異步驟用WebService)文章只能為提供參考,不一定能成為您想要的結果。以下是同步驟用和異步驟用WebService正文
異步,說到異步須要起首將以下同步。同步就是代碼依照次序履行,以後面的代碼的要求沒有正常前往成果的情形下,前面的代碼是不克不及運轉。而異步正好和這點分歧,異步是代碼運轉後,不論以後的要求能否前往成果,前面的代碼都邑持續運轉。
一:同步驟用
一個同步操作會壅塞全部以後的過程,直到這個操作完成能力履行下一段代碼
二:異步驟用
不會壅塞啟動操作的挪用線程,挪用法式必需經由過程輪番檢測,或許期待完成旌旗燈號來發明挪用的完成
三:同步驟用WebService
同步驟用WebService就是我們平凡的挪用的寫法
1:AsynCall.asmx的AsynCall.cs代碼
/// <summary> /// 依據先生姓名獲得該先生的成就 /// </summary> /// <param name="strName">先生姓名</param> /// <param name="intDelaySecond">延遲的秒數</param> /// <returns>成就</returns> [WebMethod] public int GetGrade(string strName, int intDelaySecond) { if (intDelaySecond > ) { Thread.Sleep(intDelaySecond * ); } int intGrade = ; switch (strName) { case "張三": intGrade = ; break; case "李四": intGrade = ; break; case "王五": intGrade = ; break; case "賈六": intGrade = ; break; } return intGrade; }
2:Program.cs
AsynCall.AsynCall service = new AsynCall.AsynCall(); Console.WriteLine("請輸出要查詢成就的先生的姓名:"); string strName = Console.ReadLine(); Console.WriteLine("請輸出要延遲的秒數:"); int intSecond = int.Parse(Console.ReadLine()); Console.WriteLine("同步驟用開端"); Console.WriteLine("同步驟用成果為:" + service.GetGrade(strName, intSecond)); Console.WriteLine("同步驟用停止"); Console.ReadLine();
我們輸出30秒看看運轉後果
由於我們輸出的是30秒,所以我們要比及30秒後能力輸入“同步驟用成果為:90”和“同步驟用停止”這兩句話
四:異步驟用WebService
. .NET Framework為異步化的編程模子供給了需要的辦事
. 決議特定的挪用能否應當異步處置是由客戶端也就是挪用者決議,我們看到WebService自己並沒有產生變更,產生變更的是客戶端,是挪用端
. 不須要停止額定的編程
. 署理類供給了WebService的辦法名+Async()作為異步驟用WebService的辦法名
. 異步驟用的本質是挪用者線程和被挪用者線程並行履行的進程
Console.WriteLine("異步驟用開端"); //'+='表現事宜的預定,'new AsynCall.GetGradeCompletedEventHandler(service_Completed)'表現應用編寫的事宜處置法式生成一個拜托實例,'service.GetGradeCompleted'表現添加甚麼到發生事宜對象的事宜列表傍邊去,合起來說明就是把這個拜托實例添加到發生事宜對象的事宜列表傍邊去,這個進程叫做定閱事宜,拜托就是署理,我們可以如許懂得,拜托就是把一個事宜處置函數和一個事宜聯系關系起來 service.GetGradeCompleted += new AsynCall.GetGradeCompletedEventHandler(service_Completed); //開端異步驟用 service.GetGradeAsync(strName, intSecond); Console.WriteLine("以後過程沒有被壅塞"); for (int i = ; i < ; i++) { Console.WriteLine(i); } Console.ReadLine(); private static void service_Completed(object sender, AsynCall.GetGradeCompletedEventArgs e) { Console.WriteLine("異步驟用成果為:" + e.Result); Console.WriteLine("異步驟用停止"); }
我們異樣輸出30秒看看運轉後果
由於我們輸出的照樣30秒,所以我們要比及30秒後能力輸入“異步驟用成果為:90”這句話,這是誰也轉變不了的,然則和同步驟用分歧的地方在於,“以後過程沒有被壅塞”和for輪回立刻就輸入了,所以證實你在延遲30秒的時刻,我持續履行我上面的代碼,你延遲你的我不論,我不等你,等你到猴年馬月了,我持續做我的工作