91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在C#項目中實現異步調用

發布時間:2021-04-09 18:01:53 來源:億速云 閱讀:182 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關怎么在C#項目中實現異步調用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

具體內容如下

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading.Tasks;

namespace AsyncAppTest
{
  ////異步調用示例詳解  
  /// 第1步:定義委托;此委托的返回值、參數類型必須與要調用的異步方法一致;
  ///
  public delegate Task<string> AsyncSendMail(string rece, string copyer, string subj, string body);
  
  class DelegateTest
  {
    //定義委托變量
    AsyncSendMail sendMail = null; 
    
    //異步方法的回調方法
    //回調方法必須要有類型為 IAsyncResult的參數,
    //以獲取開始異步 BeginInvoke的調用結果
    void BackCall(IAsyncResult parameter)
    { 
      //parameter.IsCompleted用于判斷異步方法是否已調用完成;
      if(parameter.IsCompleted)
      {  
        //通過EndInvoke方法獲取異步方法的返回結果(類型與異步方法的結果一致)      
        Task<string> message = sendMail.EndInvoke(parameter);
        Console.Write(string.Format("回調完成,返回值:{0}", message.Result));
      }
      else
      {
        Console.Write("調用未完成");
      }
    }

    public string AsyncSendMailHandler( string rece, string copyer, string sub, string body)
    { 
      //WcfTest.MailServiceClient 是服務器上的Wcf服務,是本示例內要調用的異步方法
      WcfTest.MailServiceClient sc = new WcfTest.MailServiceClient();
      
      //將異步方法與委托關聯
      sendMail = new AsyncSendMail(sc.SendEmailAsync); 
      string s = null;
      //以下BeginInvoke方法在調用時,先將 SendEmailAsync的參數傳入,BackCall是回調方法,s在此處的作用未弄明白,
      //但參數中不可省略
      // 異步是相對于委托實例所在線程的,本示例中是指sendMail與sc.MailServiceClient不是一個線程;
      sendMail.BeginInvoke(rece, copyer, sub, body, BackCall, s);      
      return s;
    }
    }
    
  class Program
  {    
    static void Main(string[] args)
    {      
      DelegateTest test = new DelegateTest();
      test.EventCompleteHandle("gqpeng@cmhit.com", null, "測試郵件", "測試郵件");
      Console.Write("上面是異步開始調用");
      Console.Read(); 
    }
  } 
}

另:以下是Invoke與BeginInvoke的區別。

Control.Invoke 方法 (Delegate) :在擁有此控件的基礎窗口句柄的線程上執行指定的委托。

Control.BeginInvoke 方法 (Delegate) :在創建控件的基礎句柄所在線程上異步執行指定委托。

看完上述內容,你們對怎么在C#項目中實現異步調用有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尉犁县| 巧家县| 阳朔县| 潼关县| 深州市| 鄂伦春自治旗| 东乡县| 温泉县| 仁化县| 竹溪县| 简阳市| 晋城| 瑞金市| 阿瓦提县| 射阳县| 垫江县| 体育| 丰镇市| 准格尔旗| 绵竹市| 子长县| 孙吴县| 宁强县| 嵊州市| 綦江县| 年辖:市辖区| 宁安市| 阿勒泰市| 吉木乃县| 拜城县| 闻喜县| 开化县| 黎城县| 象州县| 高淳县| 阿拉尔市| 湘潭县| 庐江县| 聂荣县| 定兴县| 镇原县|