C# -- 使用委托 delegate 执行异步操作
发布时间:2020-12-15 04:45:12 所属栏目:百科 来源:网络整理
导读:C# -- 使用委托 delegate 执行异步操作 委托是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似。 与 C 中的函数指针不同,委托是面向对象的、类型安全的和保险的。 委托的类型由委托的名称定义。 1. 使用委托异步执行方法 myWorking( /spanspan s
C# -- 使用委托 delegate 执行异步操作 委托是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似。 与 C 中的函数指针不同,委托是面向对象的、类型安全的和保险的。 委托的类型由委托的名称定义。 1. 使用委托异步执行方法 myWorking(
</span><span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> Main(<span style="color: #0000ff">string</span><span style="color: #000000">[] args)
{
Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">主线程开始....线程ID:{0}</span><span style="color: #800000">"</span><span style="color: #000000">,Thread.CurrentThread.ManagedThreadId);
myWorking myWork1 </span>= <span style="color: #0000ff">new</span> myWorking(w1 =><span style="color: #000000"> Working(w1));
myWorking myWork2 </span>= <span style="color: #0000ff">new</span> myWorking(w2 =><span style="color: #000000"> Working(w2));
myWorking myWork3 </span>= <span style="color: #0000ff">new</span> myWorking(w3 =><span style="color: #000000"> Working(w3));
myWorking myWork4 </span>= <span style="color: #0000ff">new</span> myWorking(w4 =><span style="color: #000000"> Working(w4));
myWorking myWork5 </span>= <span style="color: #0000ff">new</span> myWorking(w5 =><span style="color: #000000"> Working(w5));
</span><span style="color: #008000">//</span><span style="color: #008000">回调函数</span>
AsyncCallback callback=<span style="color: #0000ff">new</span> AsyncCallback(s=>Console.WriteLine(<span style="color: #800000">"</span><span style="color: #800000">执行完成,线程ID:{0}</span><span style="color: #800000">"</span><span style="color: #000000">,Thread.CurrentThread.ManagedThreadId));
</span><span style="color: #008000">//</span><span style="color: #008000">BeginInvoke异步执行,会新启动其他线程去执行代码</span>
myWork1.BeginInvoke(<span style="color: #800000">"</span><span style="color: #800000">唱歌</span><span style="color: #800000">"</span>,callback,<span style="color: #0000ff">null</span><span style="color: #000000">);
myWork2.BeginInvoke(</span><span style="color: #800000">"</span><span style="color: #800000">写代码</span><span style="color: #800000">"</span>,<span style="color: #0000ff">null</span><span style="color: #000000">);
myWork3.BeginInvoke(</span><span style="color: #800000">"</span><span style="color: #800000">查资料</span><span style="color: #800000">"</span>,<span style="color: #0000ff">null</span><span style="color: #000000">);
myWork4.BeginInvoke(</span><span style="color: #800000">"</span><span style="color: #800000">交作业</span><span style="color: #800000">"</span>,<span style="color: #0000ff">null</span><span style="color: #000000">);
myWork5.BeginInvoke(</span><span style="color: #800000">"</span><span style="color: #800000">检查</span><span style="color: #800000">"</span>,<span style="color: #0000ff">null</span><span style="color: #000000">);
Console.WriteLine(</span><span style="color: #800000">"</span><span style="color: #800000">主线程结束....线程ID:{0}</span><span style="color: #800000">"</span><span style="color: #000000">,Thread.CurrentThread.ManagedThreadId);
Console.ReadKey();
}
</span><span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> Working(<span style="color: #0000ff">string</span><span style="color: #000000"> strWork)
{
Console.WriteLine(strWork</span>+<span style="color: #800000">"</span><span style="color: #800000">.....线程ID:{0}</span><span style="color: #800000">"</span><span style="color: #000000">,Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(</span><span style="color: #800080">3000</span><span style="color: #000000">);
}
}</span></pre>
2. 执行结果: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |