æ¹æ³æ两ç§ï¼
ï¼1ï¼Begin/Endæ¹æ³ï¼è½ç¶è¢«ä¸¢å¼ï¼ã
ï¼2ï¼äºä»¶é©±å¨æ¹æ³ã
ä¸é¢æ¥å ·ä½è°è°è¿ä¸¤ç§æ¹æ³ï¼
1ãBegin/Endæ¹æ³
ä½¿ç¨ Begin/End 模å¼å®ç°è¿è¡å¼æ¥æ¹æ³è°ç¨ç Web æå¡å®¢æ·ç«¯
客æ·ç«¯å¦ä½ç¥éä½æ¶è°ç¨ End æ¹æ³å¢ï¼æ ¹æ® .NET Framework çå®ä¹ï¼æ两ç§æ¹æ³å¯ä»¥ä½¿å®¢æ·ç«¯ç¡®å®è¿ä¸ç¹ï¼
客æ·ç«¯è°ç¨æ¹å¼1çå¾ æ¹æ³ï¼ä½¿ç¨ WaitHandle ç±»çæ¹æ³ä¹ä¸ä½¿å®¢æ·ç«¯çå¾ æ¹æ³å®æã
客æ·ç«¯è°ç¨æ¹å¼2åè°æ¹æ³ï¼å Begin æ¹æ³ä¼ éä¸ä¸ªåè°å½æ°ï¼å¨è¯¥æ¹æ³å®æå¤çååè°ç¨è¯¥å½æ°æ¥æ£ç´¢ç»æã
注æï¼æ 论客æ·ç«¯éæ©ä¸¤ç§æ¹æ³ä¸çåªä¸ç§ä¸ Web æå¡è¿è¡å¼æ¥éä¿¡ï¼æ¶åç SOAP æ¶æ¯é½ä¸éè¿åæ¥ä»£çæ¹æ³çæç SOAP æ¶æ¯ç¸åãä¹å°±æ¯è¯´ï¼ä»ç¶åªæä¸ä¸ª SOAP 请æ±å SOAP ååºéè¿ç½ç»åéåæ¥æ¶ã代çç±»éè¿ä½¿ç¨ä¸å®¢æ·ç«¯è°ç¨ Begin æ¹æ³æ¶ä½¿ç¨ç线ç¨ä¸åç线ç¨æ¥å¤ç SOAP ååºï¼ä»èå®ç°è¯¥ç®çãå æ¤ï¼å¨ä»£çç±»æ¥æ¶åå¤ç SOAP ååºæ¶ï¼å®¢æ·ç«¯å¯ä»¥å¨å ¶çº¿ç¨ä¸ç»§ç»æ§è¡å ¶ä»å·¥ä½ã
webservice代ç ï¼
客æ·ç«¯è°ç¨æ¹å¼1(Begin/End 模å¼çåè°æ¹æ³)ï¼
解说(解说æ¥èªMSDN)ï¼
<!--[if !supportLists]-->
å®ä¹å®ç° AsyncCallback å§æçåè°å½æ°ã
public static void FactorizeCallback(IAsyncResult ar)
<!--[if !supportLists]-->
å®ä¾å AsyncCallback å§æã
<!--[endif]-->
AsyncCallback cb = new AsyncCallback(TestCallback.FactorizeCallback);
<!--[if !supportLists]--> <!--[endif]-->è°ç¨ Begin æ¹æ³ï¼å°åè°å½æ°ä½ä¸ºç¬¬äºä¸ªåæ°ä¼ éï¼å°æä¾ç¶æç对象ï¼å¨æ¬ç¤ºä¾ä¸æ¯ PrimeFactorizer ç客æ·ç«¯å®ç°ï¼ä½ä¸ºç¬¬ä¸ä¸ªåæ°ä¼ éã
IAsyncResult ar = pf.BeginFactorize(factorizableNum, cb, pf);
<!--[if !supportLists]--> <!--[endif]-->å¨ Begin æ¹æ³è¿åç IAsyncResult ä¸æ£æ¥ IsCompleted å±æ§ãå¦æ客æ·ç«¯å·²æ¶å°æå¡å¨çååºï¼è¯¥å¼å°è®¾ç½®ä¸º trueã
<!--[if !supportLists]--> <!--[endif]-->å¨åè°å½æ°ä¸è®¿é®ç¶æ对象ãIAsyncState åæ°ç AsyncState å±æ§å°è¯¥å¯¹è±¡ä½ä¸ºç¬¬ä¸ä¸ªåæ°ä¼ éç» Begin æ¹æ³ã
PrimeFactorizer pf = (PrimeFactorizer) ar.AsyncState;
<!--[if !supportLists]--> <!--[endif]-->å¨åè°å½æ°ä¸ï¼å¯¹ä¸ä¸æ¥ä¸è·åçç¶æ对象è°ç¨ End æ¹æ³ã
long[] results = pf.EndFactorize(ar);
客æ·ç«¯è°ç¨æ¹å¼2(Begin/End 模å¼ççå¾ æ¹æ³ï¼ï¼
解说(解说æ¥èªMSDN)ï¼
WaitHandle ç±»å®ç°ä¸åæ¯æçå¾ åæ¥å¯¹è±¡å¾å°ä¿¡å·éç¥çæ¹æ³ï¼WaitOneãWaitAny å WaitAllãå½åæ¥å¯¹è±¡å¾å°ä¿¡å·éç¥æ¶ï¼è¡¨ç¤ºçå¾ æå®èµæºç线ç¨æ¤æ¶å¯ä»¥è®¿é®è¯¥èµæºäºãWeb æå¡å®¢æ·ç«¯éè¿ Begin æ¹æ³è¿åç IAsyncResult 对象ç AsyncWaitHandle å±æ§ï¼æ¥è®¿é® WaitHandle 对象ã
å ·ä½åæ³ï¼
<!--[if !supportLists]-->1ã <!--[endif]-->Web æå¡å®¢æ·ç«¯è°ç¨æçæç代çç±»ç Begin æ¹æ³ã
IAsyncResult ar = pf.BeginFactorize(factorizableNum, null, null);
<!--[if !supportLists]-->2ã <!--[endif]-->Web æå¡å®¢æ·ç«¯éè¿è¿åç IAsyncResult ç AsyncWaitHandle å±æ§æ¥è®¿é® WaitHandle 对象ã
ar.AsyncWaitHandle.WaitOne()
<!--[if !supportLists]-->3ã <!--[endif]-->çå¾ æ¹æ³è¿ååï¼å®¢æ·ç«¯è°ç¨ End æ¹æ³æ¥è·åç»æã
results = pf.EndFactorize(ar);
2ãäºä»¶é©±å¨æ¹æ³
解说ï¼
Web æå¡ä»£çç±»ä¸çæ¯ä¸ª Web æ¹æ³é½å ·æä¸ä¸ªå¼æ¥ç对åºçæ¬ã代çç±»èªå¨çææ¯ä¸ª Web æ¹æ³çå¼æ¥æ¹æ³å对åºäºä»¶ãå½å¼æ¥æ¹æ³è¢«è°ç¨æ¶ï¼å°å¨å¦ä¸ä¸ªçº¿ç¨ä¸æ§è¡ï¼å¹¶å¨è¿åæ¶å¼å对åºçäºä»¶ãå¯ä»¥ä¸ºå¼æ¥æ¹æ³ç对åºäºä»¶å建ä¸ä¸ªå¤çç¨åºï¼ä»è å¨è¿åæ¶æ§è¡ä»£ç ã
æ¤æ¨¡åå¯ä»¥ç®åçæå¤çº¿ç¨åºç¨ç¨åºçè¿ç¨ï¼å 为ä¸å¿ èªå·±å®ç°å¤æçå¤çº¿ç¨ä»£ç ã
å ·ä½åæ³ï¼
<!--[if !supportLists]-->1ã <!--[endif]-->å建MethodCompleted äºä»¶ã
private void HelloWorldCompleted(Object sender,
localhost.HelloWorldCompletedEventArgs Completed)
{
// Insert code to implement the method here
}
<!--[if !supportLists]-->2ã <!--[endif]-->å该äºä»¶çå¤çç¨åºå表添å MethodCompleted äºä»¶å¤çç¨åºã
myWebService.HelloWorldCompleted += new localhost.HelloWorldCompletedEventHandler(HelloWorldCompleted);<!--[if !supportLists]-->3ã <!--[endif]-->使ç¨è¯¥æ¹æ³ç MethodAsync å½¢å¼è°ç¨ Web æ¹æ³.
HelloWorldAsync();
å¼æ¥åºæ¥çæ°çº¿ç¨ï¼.NETä¹æ¯ä¸å 许çï¼æ以å«æ³é»ç©ºåï¼ä¸é¢å¯ä»¥å¾å®¹ææ³å°ï¼åæ¶å为2ç§æ åµï¼ä¸»å¨åæ¶å被å¨åæ¶ï¼ä¸»å¨åæ¶å°±æ¯ï¼å»çè§é£ä¸ªçº¿ç¨ï¼å¹¶ä¸çå¾ ï¼å½å¼æ¥æ¹æ³å®æäºï¼å°±æå¼æ¥çº¿ç¨åæ¶ï¼ç¦ç¹åå½ä¸»çº¿ç¨ï¼BeginInvokeä¹ååEndInvokeï¼å¦æå¨EndInvokeçæ¶åï¼è¯¥å¼æ¥çº¿ç¨æ²¡æå®ææä½ï¼é£ä¹æ´ä¸ªç¨åºï¼å æ¬ä¸»çº¿ç¨ï¼åå¨é»å¡äºï¼åä¼åºç°çé¢çæ åµãè¦æ³è§£å³è¿ä¸ªé®é¢ï¼å°±ä½¿ç¨â被å¨åæ¶âæ¹å¼ï¼å ¶ä¸ä¸ä¸ªéè¦çåæ³å°±æ¯âå¼æ¥åè°âã æ ¸å¿æäºï¼ Aã ç¨åè°å½æ°ï¼å¼æ¥ç»æåï¼èªå¨è°ç¨æ¤åè°å½æ°ã Bã èä¸å¨ä¸»çº¿ç¨ä¸æå·¥çå¾ å¼æ¥ç»æï¼å¦ä¸ä¸¤ä¾ä¸å¨ä¸»çº¿ç¨ä¸è°ç¨EndInvokeãæ¤ç§æ¹æ³ï¼æ¯å¨åè°å½æ°ä¸è°ç¨EndInvokeçã