当前位置: 代码迷 >> 综合 >> Func Action 异步调用
  详细解决方案

Func Action 异步调用

热度:16   发布时间:2023-12-01 13:14:12.0

Func Action 异步调用

Action(无返回值)

直接上代码很简单的

AsyncCallback定义了回调函数

IAsyncResult 是begininvoke的返回值 作为AsyncCallback的唯一参数

action.BeginInvoke(“test”, asyncCallback, “OK”); //ok是回调参数中AsyncState的值

action.BeginInvoke(“test”, null, null); //这样就可以没有回调了

public void Actionstart(){
    Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId.ToString()}");Action<string> action = DoLong;AsyncCallback asyncCallback = (ar) =>   //完成的回调函数{
    Console.WriteLine(ar.AsyncState);};IAsyncResult asyncResult = action.BeginInvoke("test", asyncCallback, "OK");asyncResult.AsyncWaitHandle.WaitOne();   //型号量Console.WriteLine("全部结束!~");}

Func(有返回值)

func.EndInvoke((o))//o是isAsyncResult 一定要end才有返回值

 public void FuncStart(){
    Func<string, int> func = new Func<string, int>((o) => {
     return o.Length; });IAsyncResult isAsyncResult= func.BeginInvoke("zhazha", (o) =>{
    Console.WriteLine($"结果输出:{func.EndInvoke((o))}");   //可以在回调中输出 Console.WriteLine("回调函数end");},"test");//Console.WriteLine($"结果输出:{func.EndInvoke(isAsyncResult)}"); //可以独立输出 }

共同调用的函数

 public static void DoLong(string ss){
    for (int i = 0; i < 100000; i++){
    //Thread.Sleep(100);i++;}Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId.ToString()},{ss}");}

主线程调用

class Program{
    static void Main(string[] args){
    Test test=new Test();test.Actionstart();test.FuncStart();while (true){
    }}}

结果

在这里插入图片描述

  相关解决方案