C#中委托的同步和异步有什么区别
2021-07-11 21:05
标签:console oid ext back action 异步调用 执行 ati class 通过定义委托,来实现同步和异步,委托通过Action和Func来实现,记录学习委托的同步和异步的过程 委托的同步方法 委托的Invoke方法用来进行同步调用。 同步调用会阻塞线程,如果是要调用一项繁重的工作(如大量IO操作),可能会让程序停顿很长时间,造成糟糕的用户体验,这时候异步调用就很有必要了。 委托的异步调用 异步调用不阻塞线程,而是把调用塞到线程池中,程序主线程或UI线程可以继续执行。委托的异步调用通过BeginInvoke和EndInvoke来实现。 异步回调 用回调函数,当调用结束时会自动调用回调函数,解决了为等待调用结果,而让线程依旧被阻塞的局面。 C#中委托的同步和异步有什么区别 标签:console oid ext back action 异步调用 执行 ati class 原文地址:https://www.cnblogs.com/yangxi1081/p/9634678.html static void Main(string[] args)
{
//无参数方法
Action action = () => Console.WriteLine("action方法执行");
action.Invoke();
//有一个参数(多个参数基本相同)
Actionstring> action2 = (t) => Console.WriteLine("action方法执行,{0}", t);
action2.Invoke("我在测试");
//带一个参数带返回值
Funcint, bool> func = (t) => {
int i = new Random().Next(1, 10);
Console.WriteLine("随机数是{0}", i);
return i > t;
};
bool b = func.Invoke(5);
Console.WriteLine("{0}",b);
Console.Read();
}
static void Main(string[] args)
{
//无参数方法
Action action = () => Console.WriteLine("action方法执行");
action.BeginInvoke(null,null);
//有一个参数(多个参数基本相同)
Actionstring> action2 = (t) => Console.WriteLine("action方法执行,{0}", t);
action2.BeginInvoke("我是个测试",null,null);
//带一个参数带返回值
Funcint, bool> func = (t) => {
int i = new Random().Next(1, 10);
Console.WriteLine("随机数是{0}", i);
return i > t;
};
var result = func.BeginInvoke(5,null,null);
bool b = func.EndInvoke(result);
Console.WriteLine("{0}",b);
Console.Read();
}
static void Main(string[] args)
{
//无参数方法
Action action = () => Console.WriteLine("action方法执行");
AsyncCallback callback1 = t =>
{
Console.WriteLine("我是回调1");
};
action.BeginInvoke(callback1, null);
//有一个参数(多个参数基本相同)
Actionstring> action2 = (t) => Console.WriteLine("action方法执行,{0}", t);
AsyncCallback callback2 = t =>
{
Console.WriteLine("我是回调2");
};
action2.BeginInvoke("我是个测试", callback2, null);
//带一个参数带返回值
Funcint, bool> func = (t) => {
int i = new Random().Next(1, 10);
Console.WriteLine("随机数是{0}", i);
return i > t;
};
AsyncCallback callback3 = t =>
{
Console.WriteLine("我是回调3");
};
var result = func.BeginInvoke(5, callback3, null);
bool b = func.EndInvoke(result);
Console.WriteLine("{0}",b);
Console.Read();
}