c#-异步委托

博客主要介绍了C#异步委托相关内容,包含等待句柄和回调的使用。给出了等待句柄的代码示例,如 `IAsyncResult ar = fu.BeginInvoke(1, 2, null, null);` ,还展示了回调的代码,包括回调方法的定义。此外,还提及了使用lambda的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述
1.等待句柄
IAsyncResult ar = fu.BeginInvoke(1, 2, null , null);
2.回调
IAsyncResult ar = fu.BeginInvoke(1, 2, fCompleted, fu);
public static void fCompleted(IAsyncResult ar) {
Console.WriteLine(“fCompleted”);
}
c#-异步委托

using System;
using System.Threading;

// c#-异步委托
namespace ConsoleApp13
{
    public delegate int dfun(int a, int b);
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            main1();
            //main2();
            //main3();
            //main4();
        }
        // 异步委托
        static void main1() {
            dfun fu = fun;
            IAsyncResult ar = fu.BeginInvoke(1, 2, null , null);
            while (!ar.IsCompleted)
            {
                Console.WriteLine(".");
                System.Threading.Thread.Sleep(50);
            }
            int result = fu.EndInvoke(ar);
            Console.WriteLine("result:{0}", result);
        }
        // 等待句柄
        static void main2() {
            dfun fu = fun;
            IAsyncResult ar = fu.BeginInvoke(1, 2, null , null);
            while (!ar.IsCompleted)
            {
                Console.WriteLine(".");
                if (ar.AsyncWaitHandle.WaitOne(50, false)) {
                    break;
                }
            }
            int result = fu.EndInvoke(ar);
            Console.WriteLine("result:{0}", result);
        }
        // 异步回调
        static void main3() {
            dfun fu = fun;
            IAsyncResult ar = fu.BeginInvoke(1, 2, fCompleted, fu);
            for (int i = 0; i < 100; i++) {
                Console.Write(".");
                Thread.Sleep(50);
            }
        }
        // 使用lambda
        static void main4() {
            dfun fu = fun;
            fu.BeginInvoke(1,2,
                ar => {
                    int result = fu.EndInvoke(ar);
                    Console.WriteLine("result:{0}", result);
                }, null);
	    
            for (int i = 0; i < 100; i++) {
                Console.Write(".");
                Thread.Sleep(50);
            }	
        }
        public static int fun(int a, int b) {
            Console.WriteLine("fun start");
            Thread.Sleep(500);
            Console.WriteLine("fun end");
            return a + b;
        }
        public static void fCompleted(IAsyncResult ar) {
            Console.WriteLine("fCompleted");
        }
    }
}

在这里插入图片描述
等待句柄
在这里插入图片描述
异步回调
在这里插入图片描述
使用lambda
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值