首页 > 编程语言 >C#--异步回调

C#--异步回调

时间:2022-11-29 20:39:51浏览次数:36  
标签:异步 Console dlgt C# -- ar WriteLine AsyncDelegate


 异步回调:主线程在执行的时候,打开一个子线程,主线程继续执行,当子线程执行完成的时候,主线程立即输出主线程的运行结果,主线程继续执行。

注意:

1.调用BeginInvoke开始异步加载, 在 ThreadPool 线程上执行回调方法,而不是在主线程。

2.调用 EndInvoke 来完成异步调用。

3.定义的委托,可以没有参数,没有返回值,看具体功能需求。

using System;
using System.Threading;

namespace StructScript
{
public class AsyncMain
{
public delegate string AsyncDelegate();

private static void Main(string[] args)
{
AsyncDelegate dlgt = new AsyncDelegate(LoadAsync);
//异步加载开始
IAsyncResult ar = dlgt.BeginInvoke(LoadFinished, dlgt);
Console.WriteLine("Loading...");
Console.ReadLine();
}

//异步加载进行中
private static string LoadAsync()
{
Console.WriteLine("LoadAsync begins.");
int sleepTime = 3000;
Thread.Sleep(sleepTime);
return "My runtime was " + sleepTime.ToString();
}

//异步加载完成
private static void LoadFinished(IAsyncResult ar)
{
if(ar == null)
{
Console.WriteLine("IAsyncResult is null");
}
AsyncDelegate dlgt = ar.AsyncState as AsyncDelegate;
string ret = dlgt.EndInvoke(ar);
Console.WriteLine("LoadFinished with return value \"{0}\".", ret);
}
}
}

输出结果:

 

C#--异步回调_子线程

标签:异步,Console,dlgt,C#,--,ar,WriteLine,AsyncDelegate
From: https://blog.51cto.com/u_6871414/5896962

相关文章

  • Unity--Cinemachine官方实例详解
    1.2DCamera搭建一个快速场景,MainCamera选择Orthographic。在Cinemachine下有Create2DCamera,在生成的相机中设置follow,同时注意body的设置,如下图所示在虚拟相机中还需要......
  • C#--序列化和反序列化
    序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存、数据库或文件的过程。它的主要用途是保存对象的状态,以便能够在需要时重新创建对象。反向过程称为“反序列......
  • C#--泛型委托Action<T>、Func<T>、Predicate<T>的解析和用法
    C#中的委托(Delegate)类似于C或C++中函数的指针。委托是保存对某个方法引用的一种引用类型变量。若要引用的方法,具有两个参数没有返回值,使用Action<T1, T2>委托,则不需要......
  • Unity Animator -- Apply Root Motion
    Animator.ApplyRootMotion这个属性是用来控制物体在播放骨骼动画的时候是否应用骨骼根节点的运动参数。一、当没有骨骼根节点的情况时,比如只是一个Cube立方体,如果勾选了Appl......
  • 【详细解析版】Unity UGUI Mask组件实现原理
    MaskingisimplementedusingthestencilbufferoftheGPU.即Mask是利用了GPU的模板缓冲来实现的,关于模板,打个简单的比方,就像一个面具,可以挡住一部分“脸”的显示一样。......
  • Unity-利用SkinnedMeshRenderer和Mesh的BindPose实现骨骼动画
    SkinnedMeshRenderer蒙皮网格渲染器。蒙皮是指将Mesh中的顶点附着(绑定)在骨骼之上,而且每个顶点可以被多个骨骼所控制。骨骼是皮肤网格内的不可见对象,它们影响动画过程中网格......
  • Unity判断对象是否在视野内
    判断对象是否在视野内,有两种方式:第一种:不设置固定的目标,使用LayerMask,设置寻找对象的Layer,使用Physics.OverlapSphere方法,以给定的位置为圆心,按照设定距离投射一个球体,返回......
  • Unity--Physics.OverlapSphere的参数LayerMask和GameObject的layer
    Layer介绍:Unity中是用int32来表示32个Layer层。int32表示二进制一共有32位(0—31)在Unity中每个GameObject都有Layer属性,默认的Layer都是Default。在Unity中可编辑的Layer共......
  • C#数据结构--Dictionary、HashTable、List、HashSet区别
    在.Net  模仿java的过程中,抛弃了HashMap,所以我们今天分析下Dictionary、HashTable、HashSet区别。处理碰撞,即碰撞到同一个Bucket槽上:Hashtable和Dictionary从数据结构上......
  • C#设计模式读书笔记之设计模式的设计原则
    设计模式的设计原则:(重要性从上往下排列)开闭原则:对扩展开放,对修改关闭依赖倒转原则:高层模块不应该依赖底层模块,它们都应该依赖抽象;要针对抽象层编程,而不要针对具体类编程。......