E)代码分析
上节代码是最简单的异步调用代码,即调用委托的 BeginInvoke 方法来开始执行方法,在主线程上执行一些工作,然后调用委托的 EndInvoke 方法。但是EndInvoke 直到异步调用完成之后才返回,因此可能会阻止调用线程(即主线程)。
a) 声明异步方法 ,必须与后面要使用的异步调用的方法一致
Delegate Function myAdds(ByVal num As Integer, <Out()> ByRef threadid As Integer) As Long
b)定义IAsyncResult 对象,用来获取异步操作的状态
Dim myasyncresult As IAsyncResult
c)定义具体方法需要异步执行,其中mythreadrun要求与前面声明的异步方法一致(参数一致)
Dim myadd As myAdds = New myAdds(AddressOf mythreadrun)
d) BeginInvoke 方法开始执行异步方法,将在NET线程池中分配线程执行,传入的参数就是mythreadrun的参数
myasyncresult = myadd.BeginInvoke(1000, threadid, Nothing, Nothing)
e)调用执行异步方法后,执行sleep,让出处理器,给工作线程执行的机会
Thread.Sleep(0)
Console.WriteLine("{0},开始执行线程,主线程{1}号正在等待...", Now.ToLongTimeString, Thread.CurrentThread.ManagedThreadId)
f)等待异步调用完成,主线程才返回,同时将返回结果给resultvalue ,注意返回的就是异步方法定义的返回类型Long
resultvalue = myadd.EndInvoke(threadid, myasyncresult)
g)要异步执行的方法,注意<Out()> ,它指示应将数据从被调用方封送回调用方
Public Function mythreadrun(ByVal num As Integer, <Out()> ByRef threadid As Integer) As Long
Dim mynum As Integer
Dim jg As Long = 0
threadid = Thread.CurrentThread.ManagedThreadId
Try
For mynum = 1 To num
jg += mynum
Thread.Sleep(0)
Next
Console.WriteLine(threadid & "号线程 " & Now.ToLongTimeString & "线程运行完毕!")
Catch
Console.WriteLine(threadid & "号线程 " & Now.ToLongTimeString & "线程异常终止!")
'终止线程
Thread.CurrentThread.Abort()
End Try
Return jg
End Function
同时注意要直接引用OutAttribute 类所在的给定的命名空间:
Imports System.Runtime.InteropServices
F)我们可以继续改写这段代码,加入WaitHandle,使用 WaitHandle 等待异步调用
WaitHandle 类封装等待对共享资源的独占访问的操作系统特定的对象。IAsyncResult.AsyncWaitHandle 属性 获取用于等待异步操作完成的 WaitHandle。
a)使用 BeginInvoke 返回的 IAsyncResult 的 AsyncWaitHandle 属性获取 WaitHandle。
b)异步调用完成时会发出 WaitHandle 信号,可以通过调用 WaitOne 方法等待它。
c)使用 WaitHandle,则在异步调用完成之前或之后,在通过调用 EndInvoke 检索结果之前,还可以执行其他处。
代码如下:
Imports System
Imports System.Threading
Imports System.Runtime.InteropServices
Imports System.Diagnostics
Imports System.Diagnostics.ThreadState
Module Module1
'定义异步方法
Delegate Function myAdds(ByVal num As Integer, <Out()> ByRef threadid As Integer) As Long
<MTAThread()> _
Sub Main()
'定义IAsyncResult
Dim myasyncresult As IAsyncResult
'定义需要异步执行的方法
Dim myadd As myAdds = New myAdds(AddressOf mythreadrun)
'定义计算结果存放处
Dim resultvalue As Long
'异步线程调用号
Dim threadid As Integer
'异步调用
myasyncresult = myadd.BeginInvoke(5000, threadid, Nothing, Nothing)
Thread.Sleep(0)
Console.Write("{0},开始执行线程,主线程{1}号正在等待", Now.ToLongTimeString, Thread.CurrentThread.ManagedThreadId)
'等待并执行其它代码
While Not myasyncresult.AsyncWaitHandle.WaitOne(10)
'执行其它代码输出一个点,同时以10毫秒为间隔等待工作线程完成
Console.Write(".")
End While
'异步调用完成,返回结果
resultvalue = myadd.EndInvoke(threadid, myasyncresult)
'线程执行完毕
Console.WriteLine("{0}号线程计算结果为:{1}", threadid, resultvalue)
End Sub
Public Function mythreadrun(ByVal num As Integer, <Out()> ByRef threadid As Integer) As Long
Dim mynum As Integer
Dim jg As Long = 0
threadid = Thread.CurrentThread.ManagedThreadId
Try
For mynum = 1 To num
jg += mynum
Thread.Sleep(2)
Next
Console.WriteLine(threadid & "号线程 " & Now.ToLongTimeString & "线程运行完毕!")
Catch
Console.WriteLine(threadid & "号线程 " & Now.ToLongTimeString & "线程异常终止!")
'终止线程
Thread.CurrentThread.Abort()
End Try
Return jg
End Function
End Module
上面代码中的重点是:
While Not myasyncresult.AsyncWaitHandle.WaitOne(10)
'执行其它代码输出一个点,以10毫秒为间隔等待工作线程完成
Console.Write(".")
End While
我们通过myasyncresult.AsyncWaitHandle.WaitOne(10)进行等待,
等待10毫秒工作线程仍未完成,则执行主线程工作,输出一个点
直到完成为止,可看出以下效果:


- 大小: 64.6 KB
分享到:
相关推荐
AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
kolesar_3cd_01_0716
latchman_01_0108
matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
pimpinella_3cd_01_0716
petrilla_01_0308
AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
内容概要:本文档由张卓老师讲解,重点探讨DeepSeek的技术革新及强化学习对未来AI发展的重要性。文章回顾了AI的历史与发展阶段,详细解析Transformer架构在AI上半场所起到的作用,深入介绍了MoE混合专家以及MLA低秩注意机制等技术特点如何帮助DeepSeek在AI中场建立优势,并探讨了当前强化学习的挑战和边界。文档不仅提及AlphaGo和小游戏等成功案例来说明强化学习的强大力量,还提出了关于未来人工通用智能(AGI)的展望,特别是如何利用强化学习提升现有LLMs的能力和性能。 适用人群:本资料适宜对深度学习感兴趣的研究人员、开发者以及想要深入了解人工智能最新进展的专业人士。 使用场景及目标:通过了解最新的AI技术和前沿概念,在实际工作中能够运用更先进的工具和技术解决问题。同时为那些寻求职业转型或者学术深造的人提供了宝贵的参考。 其他说明:文中提到了许多具体的例子和技术细节,如DeepSeek的技术特色、RL的理论背景等等,有助于加深读者对于现代AI系统的理解和认识。
有师傅小程序开源版v2.4.14 新增报价短信奉告 优化部分细节
AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
商城二级三级分销系统(小程序+后台含源码).zip
li_3ck_01b_0918
nicholl_3cd_01_0516
媒体关注度是一个衡量公众对某个事件、话题或个体关注程度的重要指标。它主要反映了新闻媒体、社交媒体、博客等对于某一事件、话题或个体的报道和讨论程度。 媒体监督的J-F系数(Janis-Fadner系数)是一种用于测量媒体关注度的指标,特别是用于评估媒体对企业、事件或话题的监督力度。J-F系数基于媒体报道的正面和负面内容来计算,从而为公众、研究者或企业提供一个量化工具,以了解媒体对其关注的方向和强度。 本数据含原始数据、参考文献、代码do文件、最终结果。参考文献中JF系数计算公式。 指标 代码、年份、标题出现该公司的新闻总数、内容出现该公司的新闻总数、正面新闻数全部、中性新闻数全部、负面新闻数全部、正面新闻数原创、中性新闻数原创、负面新闻数原创,媒体监督JF系数。
AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
lusted_3cd_02_0716
pepeljugoski_01_0107